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。
规范节
规范 | 状态 | 说明 |
Standard | Initial definition. | |
Standard | | |
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 |
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 | |
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 | |
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