一、简介
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,同时,JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的 API 或工具包。
在JSON中,有两种结构:对象和数组
1、对象以“{”开始,“}”结束,“key/value”之间运用 “,”分隔。
jsonDemo = {"name":"jym","sex":"man"};//这里面的key可以用引号包裹也可以不使用,在进行json字符串书写的时候,需要使用引号包裹key
2、数组以“[”开始,“]”结束。值之间运用 “,”分隔。
jsonDemo2 = [{name:'jym','sex':'man'},{name:'lp',sex:'woman'}]//可以使用for循环遍历
二、JSON对象和JSON字符串的转换
在数据传输过程中,JSON是以字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键。如下:
JSON字符串:
jsonStr = '{"name":"jym","sex":"man"}';//key需要使用引号
JSON对象:
jsonDemo = {"name":"jym","sex":"man"};
1,JQuery插件支持的方式:
$.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象
2,浏览器支持的转换方式(Firefox,chrome,opera,safari,ie9,ie8)等浏览器。
console.log(JSON.parse(jsonStr));//将String转出JSON
console.log(JSON.stringify(jsonDemo));//将JSON转换成String
3,Javascript支持的转换方式:
eval('('+jsonStr+')'); //可以将json字符串转换成json对象,注意需要在json字符外包裹一对小括号
注:ie8(兼容模式),ie7和ie6也可以使用eval()将字符串转为JSON对象,但不推荐这些方式,这种方式不安全eval会执行json串中的表达式。
4,JSON官方的转换方式
http://www.json.org/提供了一个json.js,这样ie8(兼容模式),ie7和ie6就可以支持JSON对象以及其stringify()和parse()方法;
可以在https://github.com/douglascrockford/JSON-js上获取到这个js,一般现在用json2.js。
在使用JSON.stringify()函数的时候,可以使用JSON.stringify(object,undefined,2)来讲输出美化。
三, 遍历JSON对象和数组
1、遍历JSON对象,代码如下:
jsonDemo = {"name":"jym","sex":"man"};
for(let key in jsonDemo) {
console.log(jsonDemo.key);
}
2、遍历JSON数组,代码如下:
jsonDemo2 = [{name:'jym','sex':'man'},{name:'lp',sex:'woman'}];
for(let key in jsonDemo2) {
console.log(jsonDemo2[key].name+" "+jsonDemo2[key].sex);
}
JSON判断是否存在某键或字段的方法
判断JSON数据中,某个字段是否存在。
1.obj[“key”] != undefined
这种有缺陷,如果这个key定义了,并且就是很2的赋值为undefined,那么这句就会出问题了。
2.!(“key” in obj)
3.obj.hasOwnProperty(“key”)
这两种方法就比较好了,推荐使用。
4,Object.keys(a).length:获取a下面key的个数
Json和JavaScript对象区别
json:是一种数据格式,用于交换数据
JavaScript对象:一种JavaScript的引用类型。
区别:
对比内容 | JSON | JavaScript对象 |
---|---|---|
键名 | 必须为双引号 | 可允许单引号,双引号,也可以不加 |
属性值 | 只能是数值(十进制),字符串(单双引号),布尔值,null,也可以是数组,符合JSON的对象,不能使函数,NaN,Infintiy,-Infintiy和undefined | JavaScript的任意值 |
逗号问题 | 最后一个值后面不能有逗号 | 可以有逗号 |
数值问题 | 前导不能为0,小数点后会有值 | 都可以 |