JSON语法
JSON建构于两种结构:
对象——名称/值对的集合。不同的语言中,它被理解为对象,纪录,结构,字典,哈希表,有键列表(keyed list),或者关联数组。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。
数组——值的有序列表。在大部分语言中,它被理解为数组。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。
JSON没有变量或其他控制结构。JSON只用于数据传输。
本文主要是对JS操作JSON的方法做下总结。
在JSON中,有两种结构:对象和数组。
1. 一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。 名称用引号括起来;值如果是字符串则必须用括号,数值型则不需要。
例如:
代码如下 | 复制代码 |
var o={"xlid":"cxh","xldigitid":123456,"topscore":2000,"topplaytime":"2009-08-20"}; |
2. 数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。
例如:
代码如下 | 复制代码 |
var jsonranklist=[{"xlid":"cxh","xldigitid":123456,"topscore":2000,"topplaytime":"2009-08-20"},{"xlid":"zd","xldigitid":123456,"topscore":1500,"topplaytime":"2009-11-20"}]; |
为了方便地处理JSON数据,JSON提供了json.js包,下载地址:
http://www.json.org/json.js
在数据传输过程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键。例如:
JSON字符串:
代码如下 | 复制代码 |
var str1 = '{ "name": "cxh", "sex": "man" }'; JSON对象: var str2 = { "name": "cxh", "sex": "man" }; |
一、JSON字符串转换为JSON对象
要使用上面的str1,必须使用下面的方法先转化为JSON对象:
代码如下 | 复制代码 |
//由JSON字符串转换为JSON对象 var obj = eval('(' + str + ')'); 或者 var obj = str.parseJSON(); //由JSON字符串转换为JSON对象 或者 var obj = JSON.parse(str); //由JSON字符串转换为JSON对象 |
然后,就可以这样读取:
代码如下 | 复制代码 |
Alert(obj.name); Alert(obj.sex); |
特别注意:如果obj本来就是一个JSON对象,那么使用eval()函数转换后(哪怕是多次转换)还是JSON对象,但是使用parseJSON()函数处理后会有问题(抛出语法异常)。
二、可以使用toJSONString()或者全局方法JSON.stringify()将JSON对象转化为JSON字符串。
代码如下 | 复制代码 |
例如: var last=obj.toJSONString(); //将JSON对象转化为JSON字符 或者 var last=JSON.stringify(obj); //将JSON对象转化为JSON字符 alert(last); string对象转化为json对象 4:json数组转化为 String对象的方法(要掉要上面那个方法) function JsonArrayToStringCfz(jsonArray) var JsonArrayString = "["; 5 利用json.js json转string <script src="json2.js"></script> |
使用XMLHttpRequest对象创建JSON数据请求
1、创建请求
如果直接请求服务器上一个JSON文件中的JSON数据,则可以利用文件名来请求JSON文件。
代码如下 | 复制代码 |
respone.open(“GET”,”classes.txt”,true); |
在这种情况下,classes.txt是JSON数据文件的名称,request是创建用来存放XMLHttpRequest对象的变量。
2、 解析响应
一旦接受服务器的JSON数据,就可以采用两种不同的方式解析该响应。可以使用JavaScript的内置函数eval(),或者为了进一步的安全,使用JSON解析器代替。
eval()方法可以把JavaScript字符串当作参数,还可以将该字符串转换成对象,或作为命令动作。如果使用XMLHttpRequest对象的responseText属性请求JSON数据,那么使用eval()将JSON文本字符串转换成JavaScript对象。因为JSON字符串常包包含花括号,所以用圆括号来括住JSON字符串,以表明字它是一个求值表达式,而不是一个要运行的命令。
代码如下 | 复制代码 |
var jsonResp=request.responseText; jsonResp=eval(“(”+jsonResp+”)”); |
如果Web服务器既提供JSON数据也提供请求页面,则适合选用eval()方法。如果涉及安全,则适合使用JSON解析器。JSON解析器只作用于JSON文本,并且不执行其他JavaScript。在这种情况下,可以使用responseText,但要使用parseJSON()方法将JSON文本字符串转换成JavaScript对象。要访问parseJOSN函数,需要要添加引用json.js文件到页面中。
代码如下 | 复制代码 |
var jsonResp=request.responseText; jsonResp=jsonResp.parseJSON(); |
下面以实例来说明在JavaScript中简单使用JSON:
代码如下 | 复制代码 |
<script type="text/javascript"> var user =[ { "name":”shenmiweiyi”, "QQ":306451129, "email":”shenmiweiyi@163.com” "address": [ {"City":"ZhengZhou","ZipCode":"450000"}, {"City":"BeiJing","ZipCode":"100000"} ] }, { "name":”kehao”, "QQ":254892313, "email":”kehao@163.com” "address": [ {"City":"ShangHai","ZipCode":"200000"}, {"City":"GuangZhou","ZipCode":"510000"} ] } ] alert(user[0].name+”的Email是:”user[0].email); //outputs shenmiweiyi的Email是:shenmiweiyi@163.com alert(user[1].name+”住在:”user[1].address[0].city) //outputs kehao住在:ShangHai </script> |