注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

itoedr的it学苑

记录从IT文盲学到专家的历程

 
 
 

日志

 
 

PHP数组和Json数据间的转换理解  

2014-07-19 15:25:14|  分类: php开发技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
       *************************
         php二维数组与json数组的转换例
       *************************
       php代码:
<?php    // --------------------------------start::php code
$arr= array (
        $a= array (
            value=>200,
            color=>"red",
          ),   //半角逗点
        $b= array(
       value=>120,
        color=>"gray",
            ),
);
header('Content-Type: application/json; charset=UTF-8');   //代码支持多语言;
$json_str=json_encode($arr);         //编码为js-json对象数组供页面解析展示使用
echo $json_str;
?>   //---------------------------------------end:phpcode

*************************输出结果************************
[{"value":200,"color":"red"},{"value":120,"color":"gray"}]
PHP数组和Json数据间的转换理解 - itoedr - itoedr的it学苑
 ************************************************************
       
       之所以要用到Json,很多时候是因为使用ajax对象时,程序与JS函数之间的数据交互。因为JS不认识PHP中的数组,PHP也不认识JS中的数组或对象。Json作为桥梁很好地解决了这个问题。

Json简介

       JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript的一个子集,这意味着JavaScript可以直接读取Json,非常方便。

     JSON 语法规则

**********************

JSON 语法是 JavaScript 对象表示语法的子集。

    数据在键值对中
    数据由逗号分隔
    花括号保存对象
    方括号保存数组

JSON 名称/值对

*******************

JSON 数据的书写格式是:名称/值对。

注意:  名称/值对组合中的名称写在前面(在双引号中),值对写在后面(同样在双引号中),中间用冒号隔开,如:
   
"firstName":"John"

这很容易理解,等价于这条 JavaScript 语句:
   
firstName="John"


JSON 值

***********

JSON 值可以是:

    数字(整数或浮点数)
    字符串(在双引号中)
    逻辑值(true 或 false)
    数组(在方括号中)
    对象(在花括号中)
    null

json基础结构

*************
JSON结构有两种结构
json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构.
1、对象:对象在js中表示为“{}”括起来的内容,数据结构为 {key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。
2、数组:数组在js中是中括号“[]”括起来的内容,数据结构为 ["java","javascript","vb",...],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。
经过对象、数组2种结构就可以组合成复杂的数据结构了。


Json的具体形式是:
1.对象

对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。

例如: {“username”: “Eric”,”age”:23,”sex”: “man”}

代码示例:

 ::JAVASCRIPT代码::


<script type="text/javascript">
  function getUser() { var user = { "username": "Eric", "age":23, "family": {"mother":"Marry","father":"Alon","brother":"Tom"} };   alert( user.username );   alert( user.age );   alert(user.family.brother); }   getUser(); 
 </script>

2、数组

数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。

例如: ["Eric",23, "man"]

代码示例:

::js代码::

<script type="text/javascript">
   function getArray()   {
   var arr = ["Jarry",23, ["www.xiaophper.com","wxyh_999@126.com"]];
   alert(arr[0]);
   alert(arr[1]);
   alert(arr[2][0]);
   alert(arr[2][1]);
   }   getArray();
   </script>

注意:对象和数组两种形式在JS中的调用时不一样啊,对象用“.”调用,数组用下标[0]、[1]调用。还要注意在传递Json串时string类型的值要用引号括起来。

PHP中将数组转变成Json
强大的PHP已经提供了内置函数:json_encode() 和 json_decode()。很容易理解,json_encode()就是将PHP数组转换成Json。相反,json_decode()就是将Json转换成PHP数组。

例如:

 ::PHP代码::

 $array = array("name" => "Eric","age" => 23);  
 echo json_encode($array);

程序将打印出 :  {“name”:”Eric”,”age”:23}

再看下面的例子:

::PHP代码::

$array = array(0 => "Eric", 1 => 23);  
 echo json_encode($array);

程序将打印出 :["Eric",23] 


      以上两个例子可以看出:

       1)如果PHP数组的键都是数字,那么json_encode()返回一个数组形式的Json;

       2)如果PHP数组的键全是字符串。那么json_encode()就会返回一个对象形式的Json。

       要注意的是,以上两种情况在js中的调用是不同的。 


       事实上,只要在PHP数组的键中有一个字符串形式的键,那么json_encode()就会返回对象形式的Json。这是不正确的。因为,虽然在PHP代码中不会出现错误,但要是将这样的Json传给JS函数,JS会将此Json当做一个对象,而对象是不可能以数字作为属性名的。也就是说JS 不知道这是什么了。

*******************
一点参考资料
*******************
一、JS对象转换成为JSON流程:读取前端页面数据,组装成为JS对象,并通过jQuery的$.post()方法传递给后台
        处理:引用一个json2.js文件,调用JSON.stringify()方法。例如:var data = new Object(); var json_data = JSON.stringify(data);
         读取:python中,用dict_data = json.loads(json_data)就好。

二、JSON转换成为JS 流程:
        前端通过jQuery的$.getJSON()方法直接读取这个JSON格式的数据处理:用jQuery的一个方法$.parseJSON()将JSON格式的数据转成JS对象。
        例如:var json_data = $.getJSON(); var data = $.parseJSON(json_data);
**********************
一个例子(未修正)
**********************
var str = '[{a:1,b:3},{d:2,h:f}]';
eval ("var json = " + str);  // 转换为json对象
var data = []; 
for(var i=0,j=json.length;i<j;i++){
    var item = [];
    item.push(json[i].UId);  
    item.push(json[i].Uname);
    item.push(json[i].Pwd);
    data.push(item);  
}

***********************
一个函数
***********************
String.prototype.evalJSON = function(){
return eval('(' + this + ')');
}
*********************
$.load()加载的例子
*********************
<script src="/jquery/jquery-1.11.1.min.js"></script>
<script>
$(document).ready(function(){
  $("button").click(function(){
    $("#div1").load("/example/jquery/demo_test.txt",function(responseTxt,statusTxt,xhr){
      if(statusTxt=="success")
        alert("外部内容加载成功!");
      if(statusTxt=="error")
        alert("Error: "+xhr.status+": "+xhr.statusText);
    });
  });
});
</script>
说明:jquery使用load取来数据然后直接插入到id=div1的对象内部htm圈内人容的开始部分.
  评论这张
 
阅读(118)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017