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 |
浏览器兼容性
Yes | Yes | 3.5 | 8 | 10.5 | 4 | Yes | Yes | Yes | 4 | Yes | Yes | Yes | Yes |
Yes | Yes | 3.5 | 8 | 10.5 | 4 | Yes | Yes | Yes | 4 | Yes | Yes | Yes | Yes |
Yes | Yes | 3.5 | 8 | 10.5 | 4 | Yes | Yes | Yes | 4 | Yes | Yes | Yes | Yes |
66 | No | 62 | No | 53 | Yes | 66 | 66 | No | 62 | 53 | Yes | No | 10.0.0 |
Legend
- Full support
- No support
相关链接
Date.prototype.toJSON()