在普通的 Web 应用中,开发者经常为 XML 的解析伤透了脑筋,无论是服务器端生成或处理 XML,还是客户端用 JavaScript 解析 XML,都常常导致复杂的代码,极低的开发效率。实际上,对于大多数 Web 应用来说,他们根本不需要复杂的 XML 来传输数据,XML 的扩展性很少具有优势,许多 AJAX 应用甚至直接返回 HTML 片段来构建动态 Web 页面。和返回 XML 并解析它相比,返回 HTML 片段大大降低了系统的复杂性,但同时缺少了一定的灵活性。JSON 为 Web 应用开发者提供了另一种数据交换格式,很好的解决了XML的复杂问题。
1、什么是JSON
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript的一个子集,采用完全独立于语言的文本格式。JSON是一种理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成(网络传输速度快)。
举个例子(表示省市JSON写法):
<span style="font-size:14px;"> var country =
{
name: "中国",
provinces: [
{ name: "黑龙江", citys: { city: ["哈尔滨", "大庆"]} },
{ name: "广东", citys: { city: ["广州", "深圳", "珠海"]} },
{ name: "台湾", citys: { city: ["台北", "高雄"]} },
{ name: "新疆", citys: { city: ["乌鲁木齐"]} }
]
}</span>
2、怎么用
在序列化 JSON 的过程中, stringify()方法还提供了第二个参数。 第一个参数可以是一个数组, 也可以是一个函数, 用于过滤结果。 第二个参数则表示是否在 JSON字符串中保留缩进。
<span style="font-size:14px;">var box = [{name : 'a',age : 1, height : 177},{name : 'b', age : 2, height : 188}];
var json =JSON.stringify(box, ['name', 'age'], 4);
alert(json);</span>
toJSON()方法,可以将某一组对象里指定返回某个值:
<span style="font-size:14px;">var box = [{name : 'a',age : 1, height : 177, toJSON : function () {
return this.name;
}},{name : 'b',age : 2,height : 188, toJSON : function () {
return this.name;
}}];
var json =JSON.stringify(box);
alert(json);</span>
PS:由此可见序列化也有执行顺序,首先先执行 toJSON()方法;如果应用了第二个过滤参数,则执行这个方法;然后执行序列化过程,比如将键值对组成合法的 JSON 字符串,比如加上双引号。如果提供了缩进,再执行缩进操作。
解析 JSON 字符串方法 parse()也可以接受第二个参数,这样可以在还原出 JavaScript 值的时候替换成自己想要的值。
<span style="font-size:14px;">var box ='[{"name" : "a","age" : 1},{"name" :"b","age" : 2}]';
var json =JSON.parse(box, function (key, value) {
if (key == 'name') {
return 'Mr. ' + value;
} else {
return value;
}
});
alert(json[0].name);</span>
3、有什么好处
(1)、方便传输,较少冗余的字符。
方便转换。有很多的json api提供了json字符串转对象,对象转换成json串的方法。
易于阅读。json代码又良好的结构,可以很直观地了解存的是什么内容。
(2)、和XML的比较
JSON相对于XML来讲,数据的体积小,传递的速度更快些。
JSON与JavaScript的交互更加方便,更容易解析处理,更好的数据交互。
JSON的数据传输速度要远远快于XML。
总结:
主观上来看,JSON更为清晰且冗余更少些。从总体来看,XML比较适合于标记文档,而JSON却更适于进行数据交换处理。
在项目中,从WCF传过来的数据要转成JSOn串,当时不知道为什么,只知道为了DataGrid的显示,那时候还是第一次接触JSON。在项目中遇到不懂的还是要多查,弄明白之后再那样做。这样才会进步。