JSON对象、数组和处理JSON串的⽅法
js合并两个数组 JSON(JavaScript Object Notation) 是⼀种轻量级的数据交换格式,采⽤完全独⽴于语⾔的⽂本格式,是理想的数据交换格式。同
时,JSON是 JavaScript 原⽣格式,这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的 API 或⼯具包。
本⽂主要是对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是以⽂本,即字符串的形式传递的,⽽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 JSONString(); //将JSON对象转化为JSON字符
或者
var last=JSON.stringify(obj); //将JSON对象转化为JSON字符
alert(last);
留⼼:
上⾯的多个要领中,除了eval()函数是js⾃带的之外,其他的多个要领都来⾃json.js包。新版本的 JSON 修改了 API,将 JSON.stringify()和 JSON.parse() 两个要领都注⼊到了 Javascript 的内建对象⾥⾯,前者变成了 JSONString(),⽽后者变成了
String.parseJSON()。如果提⽰不到toJSONString()和parseJSON()要领,则说明您的json包版本太低。
三、Json在Ajax中的应⽤
客户端可以给服务器端通过地址栏或者post很容易的提交数据,但是服务器端处理完数据之后,将计算的结果信息回传给客户端时就存在了⼀定的难度,特别是数据量较⼤时。这个时候数据的格式成了关键,按照某种格式可以很⽅便的进⾏数据的组装,然后可以很⽅便的进⾏解析。使⽤Json便是⼀种
很好的策略。在服务器端,按照Json的格式拼装好⼀个字符串,响应给客户端。客户端如何进⾏解析呢?⼀般有两种策略(两种策略的名称是⾃⼰给的名字,不⼀定很合理,但是思路应该是没有问题的):
1.直接解析
var json = eval('(' + result + ')');
通过上⾯这个表达式,就完成了将服务器端响应给客户端的Json格式的字符串解析成了⼀个Json(格式的)对象,名称为“json”,通过“json.”或者“json[]”的⽅式便可进⾏数据访问。
2.间接解析
var json = "r=" + result;
eval(json);
当然上⾯⾏代码可以合并为:eval("r=" + result);
通过上⾯的计算,也可以将服务器端响应给客户端的Json格式的字符串解析成了⼀个Json(格式的)对象,但是该对象名称为“r”,通过“r.”或者“r[]”的⽅式可进⾏数据访问。
总结:Json是⼀种简单的数据交换格式,它⼏乎可以很好的代替xml让服务器之间灵活的交换数据。
四、JavaScript中的数组和对象
在JavaScript中,通常⽤[]创建的数据格式称为数组,⽤{}创建的东西称为对象。
有⼀个数组a=[1,2,3,4],还有⼀个对象a={0:1,1:2,2:3,3:4},运⾏alert(a[1]),两种情况下的运⾏结果是相同的!这就是说,数据集合既可以⽤数组表⽰,也可以⽤对象表⽰,那么到底该⽤哪⼀种呢?
其实数组表⽰有序数据的集合,⽽对象表⽰⽆序数据的集合。如果数据的顺序很重要,就⽤数组,否则就⽤对象。
当然,数组和对象的另⼀个区别是,数组中的数据没有“名称”(name),对象中的数据有“名称”(name)。但是问题是,很多编程语⾔中,都有⼀种叫
做“关联数组”(associativearray)的东西。这种数组中的数据是有名称的。⽐如在javascript中,可以这样定义⼀个对象:
var a={"城市":"北京","⾯积":16800,有趣,"⼈⼝":1600};
但是,也可以定义成⼀个关联数组:
var a = new Array();
a["城市"]="北京";
a["⾯积"]=16800;
a["⼈⼝"]=1600;
这样⼀来好像数组和集合就没有区别了,其实不是,在Javascript语⾔中,关联数组就是对象,对象就是关联数组。通过第⼆种⽅式创建的数组和通过 []⽅式创建的数组是有很⼤的区别的,在第⼆个⽅式创建的“数组”中,也可以和第⼀种⽅式类似,通过“a.城市”来得到“北京”,“a.⼈⼝”来得到 “1600”,但是它和第⼀种⽅式创建的对象⼜是有区别的,通过第⼀种⽅式定义的a是没有length属性的,⼆通过第⼆种⽅式定义的a有,可是值为0,可见⾥⾯的差别还是有的,要想具体搞清楚,恐怕得看看底层的⼀些实现代码了。
当 eval 返回的 json 值时,提⽰ Error: Invalid Label 摘要: 我们经常会在服务器端返回 json 格式的值,这样可以直接在脚本中当作完整的对象来使⽤,但是,许多新⼿通常都会遇到⼀个错误提⽰:Invalid Label ,这个问题通常会让⼈苦恼不堪,因为明明正确的 json 格式,却提⽰错误。如果你遇到此问题,那赶快看看本⽂的内容吧!
我们经常会在服务器端返回 json 格式的值,这样可以直接在脚本中当作完整的对象来使⽤,但是,许多新⼿通常都会遇到⼀个错误提⽰: Invalid Label ,这个问题通常会让⼈苦恼不堪,因为明明正确的 json 格式,却提⽰错误。
假如你从服务器端返回的是 json 格式的字符串:
>
当你在脚本中⽤ eval 的⽅式运⾏:
>
这时会提⽰: Error: Invalid Label
实际上,我们的 json 格式并没有错误,只是在 eval 的时候,要把你的 json 值⽤ “()” 括号括起来:> var result = eval("(" + o.responseText + ")"); help001
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论