简介
1、JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON
2、是轻量级的文本数据交换格式。 JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理JSON数据,不须要任何特殊的 API 或工具包。
3、JSON 独立于语言:JSON 虽然使用 JavaScript来描述数据对象,但JSON 仍然独立于JS。
4、JSON 解析器和 JSON 库支持许多不同的编程语言。目前非常多的动态(PHP,JSP,.NET)编程语言都支持JSON。
5、对于 AJAX 应用程序来说,JSON 比 XML 更快更易使用
一、JSON的两种数据结构 及操作
JSON 有两种数据结构:对象、数组。
JSON 语法是 JavaScript 语法的子集,所以操作同JS一样。
1、对象
//简单形式:
var o={"name":"bty","age":11,"time":"2009-08-20"};
//复杂形式:
var o2 = {
"list":[
{"password":"666","name":"bty"},
{"password":"422","name":"zsn"}],
"array":[
{"password":"123","name":"bty"},
{"password":"452","name":"zsn"}]
};
注:{开始,}结束。名称/值用 逗号 隔开。
名称用 双引号括 起来;值如果是字符串则必须用 双引号括号,数值型则不须要。
2、数组
//简单形式:
var jsonArr2 = ["Google", "Runoob", "Taobao"]
//复杂形式:
var jsonArr2 = [
{"name":"bty","age":11,"time":"2009-08-20"},
{"name":"zsn","age":10,"time":"2008-08-20"} ];
注:数组是值(value)的有序集合。以“[”开始,“]”结束。值之间运用 “,”(逗号)分隔。
3、操作
以上面例子为例。
(1) 修改值: 同JS一样
o2.list[0].name = "sam"; //修改对象属性的值
jsonArr2[0].name = "sam"; //修改数组元素的值
(2)删除值: 同JS一样
delete o2.list; //删除对象属性
delete jsonArr2[0]; //删除数组元素
delete jsonArr2[0].name; //删除数组元素属性
二、JSON的关键
在数据传输流程中,json是以文本(即字符串)的形式传递的,而JS操作的是JSON对象,所以JSON对象和JSON字符串之间的相互转换是关键。
区分JSON字符串和JSON对象:
//JSON字符串:
var str1 = '{ "name": "bty", "sex": "man" }';
//JSON对象:
var str2 = { "name": "zsh", "sex": "man" };
三、JSON字符串与对象的转换
1、JSON字符串 转换 为JSON对象
以上面str1为例
转换有三种形式
//1)
var obj = eval('(' + str1 + ')');
//2)
var obj = str1.parseJSON();
//3)
var obj = JSON.parse(str1);
然后,就可以这样读取转换后的数据:
alert(obj.name);
alert(obj.sex);
注:JSON.parse()和eval()方法的区别:JSON.parse()不仅可以解析json格式的数据,而且还会对要解析的字符串进行格式检查,如果格式不正确则不进行解析,而eval()则可以解析任何字符串,eval是不安全的。
eval(string):函数可计算某个字符串,并执行其中的的 JavaScript 代码。
eval()详解:点击这里
2、JSON对象 转化 为JSON字符串
//1)
var last=obj.toJSONString();
//2)
var last=JSON.stringify(obj);
alert(last);
四、实例
var str='[
{"name":"bty","sex":"man"},
{"name":"ZSN","sex":"girl"}
]'; //字符串
var obj = str.parseJSON();//JSON字符串转JSON对象
alert(obj[0].name); //bty
日常项目JSON运用的难点 并不是通过网络请求接受到JSON数据,而是如何把接受到的JSON数据进行处理(转换数据结构等)。
网络请求分配给客户端的JSON数据一般都是 JSON字符串,把JSON字符串转换为可操作的 JSON对象很容易(调用JSON.parse()或parseJSON()方法即可),但是往往转换后的 JSON对象的数据格式或结构 并不符合 项目中API的要求,所以我们还要将该JSON对象的数据结构转换为项目中 可用的数据结构,这才是难点。