一、JSON身份揭秘
JSON:JavaScript 对象表示法(JavaScript Object Notation)。
轻量级的存储和交换信息的格式(语法)。
构建JSON的两种结构:
1、”键-值 对“(或者叫”名称-值 对“)形式
这种方式是无序的,"{}"包围,”:“进行值--对的分割,多个键值对使用”,“分割。
如在JavaScript中实现:
//在javascript中创建JSON对象 var JSONObject = { 'name':'BeginMan', 'age':'22', 'address':'ZhengZhou', 'profession':'Pythoner' }; //调用数据 document.write(JSONObject.name); //"BeginMan" document.write(JSONObject.age); //"22" document.write(JSONObject.address); //"ZhengZhou" document.write(JSONObject.Pythoner);//"Pythoner"
2、以”值的有序列表“,即数组(array)的形式
数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。
//JSON 以数组的形式 var JsonArray = [{"name":"Zhangsan","age":18},{"name":"LiSi","age":20}]; //遍历输出 for(var i=0;i<JsonArray.length;i++){ alert(JsonArray[i].name); alert(JsonArray[i].age); } //或者索引输出 alert(JsonArray[0].name); //同时可以进行修改 JsonArray[0].name = "ABC";
循环:
for(var obj in {"job":"No"}){ alert(obj); //只输出其 键,如'job' }
注意:JSON 独立于语言。
JSON 使用 JavaScript 语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。
JSON 值可以是:
二、JSON与XML
可读性:JSON和XML的可读性可谓不相上下,一边是简易的语法,一边是规范的标签形式,很难分出胜负。
可扩展性:XML天生有很好的扩展性,JSON当然也有,没有什么是XML能扩展,而JSON却不能。不过JSON在Javascript主场作战,可以存储Javascript复合对象,有着xml不可比拟的优势。
编码、解码难度:XML编码容易解码难,而JSON恰相反。
读写速度:JSON要快一些
三、JSON的解析
JSON 最常见的用法之一,是从 web 服务器上读取 JSON 数据(作为文件或作为 HttpRequest),将 JSON 数据转换为 JavaScript 对象,然后在网页中使用该数据。
如Ajax等。
1、Javascript 的 eval()函数
由于 JSON 语法是 JavaScript 语法的子集,JavaScript 函数 eval() 可用于将 JSON 文本转换为 JavaScript 对象。
eval() 函数使用的是 JavaScript 编译器,可解析 JSON 文本,然后生成 JavaScript 对象。必须把文本包围在括号中,这样才能避免语法错误:
var person = '{"name":"BeginMan","age":22}';//Json字符串 var personObject = eval("("+person+")"); //解析为Json对象 alert(personObject); //[object Object]
eval 函数非常快,但是它可以编译任何 javascirpt 代码,这样的话就可能产生安全的问题。eval 的使用是基于传入的代码参数是可靠的假设的,有一些情况下,可能客户端是不可信任的。
2、json.js
为了方便地处理JSON数据,JSON提供了json.js包,下载地址:http://www.json.org/json.js
也可在这查看:http://files.cnblogs.com/BeginMan/json.js
JSON.parse(JsonText,filter); 将 JavaScript 对象表示法 (JSON) 字符串转换为对象。可选的 filter 参数将遍历每一个value key 值对, 并进行相关的处理。parse:解析
//导入json.js //JSON.parse(JsonText,filter);//可选的 filter 参数将遍历每一个value key 值对, 并进行相关的处理。 var pjson = JSON.parse(person,function(key,value){ alert(key+value);//输出nameBeginMan,age22 })
JSON.stringify(value [, replacer] [, space])作用:将 JavaScript 对象转换为字符串,这个函数的作用主要是为了系列化对象的。
//数据接上面 var pobject = JSON.stringify(personObject); alert(pobject); //输出{"name":"BeginMan","age":22}
将两个JSON对象组装到一个里面
function addJson(J1,J2){ if(J1&&J2){ for(var i in J2){ J1[i]=J2[i]; } } } var json1 = {"name":"BeginMan"}; var json2 = {"age":22}; addJson(json1,json2);//由于并没有返回结果,所以只是进行功能上的操作 alert(JSON.stringify(json1)); //输出{"name":"BeginMan","age":22}
参考:
http://www.json.org/json-zh.html
http://www.cnblogs.com/xiaoyaoyou3/archive/2013/04/12/3015903.html
http://blog.csdn.net/sanpintian/article/details/7347711