轻量级的数据交换格式JSON
Posted 前端开发自留地
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了轻量级的数据交换格式JSON相关的知识,希望对你有一定的参考价值。
JSON:javascript 对象表示法(JavaScript Object Notation)。
JSON 是一种语法用来序列化对象、数组、数值、字符串、布尔值和 null 。它基于 JavaScript 语法,但与之不同:一些JavaScript不是JSON,一些JSON不是JavaScript。参考 JSON:不是JavaScript 的子集。
JSON 与 javascript 对象的区别
对比内容 | JSON | Javascript 对象 |
键名 | 必须是加双引号 | 可允许加单引号,双引号,也可以不加 |
属性值 | 只能是数值(10进制) ,字符串(双引号),布尔值和null,也可以是数组,符合JSON的对象,不能是函数,NaN,Infinity,-Infinity和undefined | javascript 中的任意值 |
逗号 | 最后一个值后面不能有逗号 | 可以有逗号 |
数值 | 前导不能为0,小数点后会有值 | 都可以 |
JSON的方法
JSON.parse()
解析一个JSON字符串,可选地转换生成的值及其属性,并返回值。
JSON.parse('{}'); // {}
JSON.parse('true'); // true
JSON.parse('"foo"'); // "foo"
JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]
JSON.parse('null'); // null
JSON.stringify()
返回与指定值相对应的一个JSON字符串,可选地仅包含某些属性或以用户定义的方式替换属性值。
JSON.stringify({}); // '{}'
JSON.stringify(true); // 'true'
JSON.stringify("foo"); // '"foo"'
JSON.stringify([1, "false", false]); // '[1,"false",false]'
JSON.stringify({ x: 5 }); // '{"x":5}'
JSON的Polyfill
JSON对象不被旧版本浏览器支持。你可以把下面代码放到脚本的开始位置,这样就可以在那些没有原生支持 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) + '"';
};
})()
};
}
浏览器兼容:IE8+
以上是关于轻量级的数据交换格式JSON的主要内容,如果未能解决你的问题,请参考以下文章