轻量级的数据交换格式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的主要内容,如果未能解决你的问题,请参考以下文章

2016/4/2 json:js和jquery中轻量级数据交换格式 例: 窗口弹出 popwindow

Json解析

JSON简单入门

JSON简单入门

servlet与ajax数据交换(json格式)

jQueru中数据交换格式XML和JSON对比