Json

json  =>  javascript object notation

什么是json

数据交换的文本格式,简单说,每个Json对象,就是一个值,要么是简单类型的值,要么是复合类型的值,但是只能是一个值,不能是两个或更多的值,这就是说,每个Json文档只能包含一个值。

(ie7及以下浏览器不支持json,只需要去http://json.org下载对应文件就行)。

json的优点

书写简单,一目了然,符合javascript原生语法,可以由解释引擎直接处理,不用另外添加解析代码。

json数据类型和格式规定

· 复合类型的值只能是数组或对象,不能是函数、正则表达式对象,日期对象。

· 简单类型的值只有四种:字符串、数值(必须以十进制表示)、布尔值和null(不能使用NaN,Infinity,-Infinity,undefined)。

· 字符串必须使用双引号表示,不能使用单引号  ["one","two","three"]

· 对象的键名必须放在双引号里面  {"one":1,"two":2,"three":3}    {"names":["张三","李四"]}

· 数组或对象最后一个成员的后面,不能加逗号   [{"name":"张三"},{"name":"李四"}]

Json的两个方法( JSON.stringify()  和  JSON.parse()

JSON.stringify()用于将一个值转为字符串。该字符串应该符合JSON格式,并且可以被JSON.parse()方法还原。

例1:

JSON.stringify('abc');    // ""abc""
JSON.stringify(1);     //  "1"
JSON.stringify(false);    //  "false"

JSON.stringify() 的第二个参数(可以是函数,用来更改JSON.stringify的默认行为),指定需要转成字符串的属性

var obj = {
  'prop1':'value1',
  'prop2':'value2',
  'prop3':'value3'          
}
var selectedProperties = ['prop1','prop2'];
JSON.stringify(obj,selectedProperities);

// "{"prop1":"value1","prop2":"value2"}"
JSON.stringify(['a','b'],['0']);

// "["a","b"]"   对数组无效,只对对象有效

JSON.stringify({0:'a',1:'b'},['0']);

// "{"0","a"}"
function f(key,value){
  if(typeof value === "number"){
       value = 2 * value;   
   }  
   return value;  
}
JSON.stringify({a:1,b:2},f);

// "{"a":2,"b":4}"

JSON.stringify 的第三个参数,用于增加返回的JSON字符串的可读性。如果是数字,表示每个属性前面添加的空格(最多不超过10个);如果是字符串(不超过10个字符),则该字符串会添加在每行前面。

JSON.stringify({p1:1,p2:2},null,'|--');
//{
    |--"p1":1,
    |--"p2":2
   }

toJSON方法

如果JSON.stringify的参数对象有自定义的toJSON方法,那么JSON.stringify会使用这个方法的返回值作为参数,而忽略原对象的其他属性。

var user = {
  firstName:'三',
  lastName:'张',
  get fullName(){
     return this.lastName + this.firstName;  
  },
  toJson:function(){
     var data = {
        firstName:this.firstName,
        lastName:this.lastName
     };
     return data;  
  }      
};
JSON.stringify(user);

// "{"firstName":"三","lastName":"张"}"

toJSON方法可以将正则对象自动转为字符串。因为JSON.stringify默认不能转换正则对象,但是设置了toJSON方法以后,就可以转换正则对象了。

var obj = {
   reg : /foo/
}
//设置 toJSON方法

RegExp.prototype.toJSON = RegExp.prototype.toString;
JSON.stringify(/foo/) ;
// ""/foo/""

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
var o = JSON.parse('{"name":"张三"}');
o.name  //张三    
JSON.parse方法可以接受一个处理函数,用法与JSON.stringify方法类似。

function f(key,value){
  if(key === ''){
      return value;
  }  
  if(key === 'a'){
      return value + 10;
  }
}
var o = JSON.parse('{"a":1,"b":2}',f);
o.a  // 11
o.b  //undefined
原文地址:https://www.cnblogs.com/baixuemin/p/6485579.html