json与object的区别:
1、JSON是对象,但对象不一定是JSON
2、对象的组成是由属性和属性值,也就是KEY->VALUE对组成,value可是是任意的数据类型,当value为一个函数的时候,这个时候叫做方法。而你通过

  JSON.parse()传入的字符串并里面有VALUE为function的吗?不可能像下面的例子一样写这个被转换的字符串:

1 var a  ={name:"",say:function(){}};
2 JSON.parse(a);

  以上代码,是没有办法执行的。即使是服务器转换的JSON字符串,也没有把方法转换进这个字符串的。
3、在JSON对象中出现的value始终都不可能是一个函数,如果转换后添加进去方法,那就变成一个真正的JS对象了。
4、JSON是一种数据结构,并不是对象。(所以没有方法)

(JSON和对象的区别就在于有没有方法,在JS中某种意义上讲JSON.parse()转换的就是一个对象。)

 

整理转自:

 

json方法:
JSON.parse()
解析JSON字符串并返回对应的值,可以额外传入一个转换函数,用来将生成的值和其属性,在返回之前进行某些修改
JSON.stringify()

返回与指定对应的JSON字符串,可以通过额外的参数,控制仅包含某些属性,或者以自定义方法来替换某些key对应的属性值。

 

JSON.parse() 解析JSON字符串并返回对应的值,可以额外传入一个转换函数,用来将生成的值和其属性, 在返回之前进行某些修改。 JSON.stringify() 返回与指定值对应的JSON字符串,可以通过额外的参数, 控制仅包含某些属性, 或者以自定义方法来替换某些key对应的属性值。

Polyfill节

JSON对象可能不被老版本的浏览器支持。可以将下面的代码放到JS脚本最开始的位置,这样就可以在没有原生支持 JSON 对象的浏览器(如IE6)中使用 JSON对象。以下算法是对原生JSON对象的模仿:

if (!window.JSON) {
  window.JSON = {
    parse: function(sJSON) { return eval('(' + sJSON + ')'); },
    stringify: (function () {
      var toString = Object.prototype.toString;
      var isArray = Array.isArray || function (a) { return toString.call(a) === '[object Array]'; };
      var escMap = {'"': '\\"', '\\': '\\\\', '\b': '\\b', '\f': '\\f', '\n': '\\n', '\r': '\\r', '\t': '\\t'};
      var escFunc = function (m) { return escMap[m] || '\\u' + (m.charCodeAt(0) + 0x10000).toString(16).substr(1); };
      var escRE = /[\\"\u0000-\u001F\u2028\u2029]/g;
      return function stringify(value) {
        if (value == null) {
          return 'null';
        } else if (typeof value === 'number') {
          return isFinite(value) ? value.toString() : 'null';
        } else if (typeof value === 'boolean') {
          return value.toString();
        } else if (typeof value === 'object') {
          if (typeof value.toJSON === 'function') {
            return stringify(value.toJSON());
          } else if (isArray(value)) {
            var res = '[';
            for (var i = 0; i < value.length; i++)
              res += (i ? ', ' : '') + stringify(value[i]);
            return res + ']';
          } else if (toString.call(value) === '[object Object]') {
            var tmp = [];
            for (var k in value) {
              if (value.hasOwnProperty(k))
                tmp.push(stringify(k) + ': ' + stringify(value[k]));
            }
            return '{' + tmp.join(', ') + '}';
          }
        }
        return '"' + value.toString().replace(escRE, escFunc) + '"';
      };
    })()
  };
}

业界更专业, 更强大的JSON对象 polyfills 是 JSON2 和 JSON3。

规范节

规范

状态

说明

ECMAScript 5.1 (ECMA-262)
JSON

Standard

Initial definition.

ECMAScript 2015 (6th Edition, ECMA-262)
JSON

Standard

 

ECMAScript Latest Draft (ECMA-262)
JSON

Draft

 

浏览器兼容性节

Update compatibility data on GitHub

 

Desktop

Mobile

Server

 

Chrome

Edge

Firefox

Internet Explorer

Opera

Safari

Android webview

Chrome for Android

Edge Mobile

Firefox for Android

Opera for Android

iOS Safari

Samsung Internet

Node.js

Basic support

Full supportYes

Full supportYes

Full support3.5

Full support8

Full support10.5

Full support4

Full supportYes

Full supportYes

Full supportYes

Full support4

Full supportYes

Full supportYes

Full supportYes

Full supportYes

parse

Full supportYes

Full supportYes

Full support3.5

Full support8

Full support10.5

Full support4

Full supportYes

Full supportYes

Full supportYes

Full support4

Full supportYes

Full supportYes

Full supportYes

Full supportYes

stringify

Full supportYes

Full supportYes

Full support3.5

Full support8

Full support10.5

Full support4

Full supportYes

Full supportYes

Full supportYes

Full support4

Full supportYes

Full supportYes

Full supportYes

Full supportYes

JavaScript is a superset of JSON

Full support66

No supportNo

Full support62

No supportNo

Full support53

Full supportYes

Full support66

Full support66

No supportNo

Full support62

Full support53

Full supportYes

No supportNo

Full support10.0.0

Legend

Full support Full support No support No support