JSON的相关内容

包括:

JSON概述,

JSON语法规则,

使用JSON(JSON对象,JSON数组,JSON文档与对象的转换)

JSON应用

额外内容(PHP输出JSON数据,解析JSON字符串,客户端如何使用服务器JSON输出)

JSON概述:

JSON:JavaScriptObjectNotation,JavaScript对象表示法,原本是JavaScript中创建对象的一种语法。

现在,JSON已经从JavaScript中独立出来,作为一种独立的字符串数据表示法,被Java、C#、C++、PHP、OC等几乎所有主流语言所支持。

JSON作为一种轻量级的文本数据交换格式,已被广泛使用于存储和交换文本数据领域,作用域XML类似,但比XML更简洁、更快、更容易解析。

JSON语法规则:

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

数据在名称/值对中

数据由逗号分隔

花括号保存对象

方括号保存数组

JSON数据的基本格式是“名称/值”对

"age":35//等价于js语句age=35

“名称”应使用双引号引起来

“值”可以是如下类型:

(1)数字(整数或浮点数)

(2)字符串(使用双引号)

(3)逻辑值(true或false)

(4)数组(在方括号中)

(5)对象(在花括号中)

(6)null

使用JSON:

JSON对象:

JSON字符串可以描述一个对象。具体语法为:

书写在花括号中。

可以包含任意多个使用逗号分隔的“名称/值”对。

“名称”必须使用双引号括起来,值若是字符串也必须使用双引号括起来。

varjsonTxt='{

"name":"Tom",

"age":35,

"isWorked":true

}';

JSON数组:

JSON字符串还可以描述一个数组,具体语法为:

书写在方括号中。

其中可以包含多个值或对象。

varjsonTxt1='[10,true,null,{"x":60,"y":30}]';

varjsonTxt2='[

{"name":"Tom","age":35},

{"name":"Joe","age":38},

]';

JSON文档与对象的转换:

使用eval()函数把一段JSON文本字符串解析为一个JavaScript对象:

varjsonTxt='{"x":60,"y":30}';

varjsObj=eval("("+jsonTxt+")");

把文本放在()中,防止语法错误。

注意:

(1)根据eval()的严格语法要求,其接收的参数只能是string类型,而不能是String类型!

(2)使用eval()将JSON字符串解析为JavaScript对象时,若不添加左右的小括号,则会被解释器理解为一段用大括号包围起来的普通JavaScript代码块,而无法识别为一个对象的声明。

还可以使用JSON.parse(string)方法来解析JSON字符串得到JavaScript对象:

varjsonTxt='{"x":60,"y":30}';

varjsObj=JSON.parse(jsonTxt);

使用JSON.stringify(jsonObj)方法把JavaScript对象格式化为JSON字符串:

varjsObj={"x":60,"y":30};

console.log(typeofJSON.stringify(jsObj));

IE7-中的JS解释器不支持这两种方法,可以下载json2.js工具解决此问题。

JSON应用:

使用AJAX解析并返回JSON(比如级联列表)

额外内容:

PHP输出JSON数据:

可以使用json_encode()函数将一个PHP数组或对象等数据编码为一个JSON形式的字符串。

在向客户端输出JSON字符串数据之前,需向客户端声明Content-Type响应头。

header('Content-Type:application/json');

$nameArr=array('King','Scott','Smith');

$nameStr=json_encode($nameArr);

echo$nameStr;

索引数组将被编码为JSON数组。

header('Content-Type:application/json');

$empArr=array('id'=>7788,'name'=>'Scott','age'=>35);

$empStr=json_encode($empArr);

echo$empStr;

关联数组将被编码为JSON对象。

解析JSON字符串:

对于客户端请求中提交的或者从文件中读取的JSON字符串,可以使用json_decode()解析为PHP数组或对象。

/*假设客户端通过表单或AJAX提交了数据

shoeSizeArr='[37,39,40,41]'*/

$str=$_REQUEST['shoeSizeArr'];

$arr=json_decode($str);

var_dump($arr);

PS:array(4){

[0]=>int(37)

[1]=>int(39)

[2]=>int(40)

[3]=>int(41)

}

/*假设客户端通过表单或AJAX提交了数据

queryBook='{"bname":"java","pdate":2015}'*/

$str=$_REQUEST['queryBook'];

$obj=json_decode($str);

var_dump($obj);

echo$obj->bname;

echo$obj->pdate;

PS:object(stdClass)#1(2){

["bname"]=>string(4)"java"

["pdate"]=>int(2015)

}

PHP中访问对象的成员属性使用->运算符而不是.号

客户端如何使用服务器JSON输出:

若某个服务器端动态页面声明了响应头Content-Type:application/json且响应主体是JSON数组或JSON对象,那么该页面就是一个返回了纯数据的页面,而没有庞杂繁复的HTML标签。这样的页面返回的内容一般在客户端可以做如下用途:

被客户端AJAX程序解析,动态的显示在DOM树中。

被Android/iOSApp使用,显示在移动应用中。

相关推荐