一、简介

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,小数点后会有值

都可以