It has been 1485 days since the last update, the content of the article may be outdated.

json

JSON是JavaScript Object Notation的缩写,它是一种数据交换格式。
2002年,雅虎的高级架构师道格拉斯·克罗克福特(Douglas Crockford)发明了JSON这种超轻量级的数据交换格式。

数据类型

  • number:和JavaScript的 number完全一致;
  • boolean:就是JavaScript的 truefalse
  • string:就是JavaScript的 string
  • null:就是JavaScript的 null
  • array:就是JavaScript的Array表示方式——[]
  • object:就是JavaScript的 { ... }表示方式。

and …

  • 字符集必须是 UTF-8;
  • JSON 的字符串规定必须用双引号 ""Object 的键也必须用双引号 ""

序列化

使用JSON.stringify()方法。
把任何JavaScript对象变成JSON,就是把这个对象序列化成一个JSON格式的字符串,这样才能够通过网络传递给其他计算机。

javascript
var xm={
name: 'xiaoming',
age:14,
gender:'M',
marriage: false,
grade: null,
skills:['js','cpp','ncl','python']
};

var s=JSON.stringify(xm);
alert(s);
//"{"name":"xiaoming","age":14,"gender":"M","marriage":false,"grade":null,"skills":["js","cpp","ncl","python"]}"

按缩进输出:

javascript
JSON.stringify(xm, null, '  ');//设置缩进
//results
"{
"name": "xiaoming",
"age": 14,
"gender": "M",
"marriage": false,
"grade": null,
"skills": [
"js",
"cpp",
"ncl",
"python"
]
}"

第二个参数用于控制如何筛选对象的键值,如果我们只想输出指定的属性,可以传入 Array

javascript
JSON.stringify(xm, ['name', 'skills'], '  ');//指定返回属性,默认null返回全部
//results
"{
"name": "xiaoming",
"skills": [
"js",
"cpp",
"ncl",
"python"
]
}"
javascript
function convert(key,value){
if(typeof value==='string'){
return value.toUpperCase();
}
return value;
}

JSON.stringify(xm,convert,' ');

//results
"{
"name": "XIAOMING",
"age": 14,
"gender": "M",
"marriage": false,
"grade": null,
"skills": [
"JS",
"CPP",
"NCL",
"PYTHON"
]
}"

可以给xiaoming定义一个toJSON()的方法,直接返回JSON应该序列化的数据:

javascript
var xm={
name:'xiaoming',
age:14,
gender:'M',
marriage: false,
grade: null,
skills: ['js','cpp','ncl','python'],

toJSON: function(){
return {"name": this.name,
"age":this.age,
"skill":this.skills
};
}
};
JSON.stringify(xm);
//
"{"name":"xiaoming","age":14,"skill":["js","cpp","ncl","python"]}"

反序列化

如果我们收到一个JSON格式的字符串,只需要把它反序列化成一个JavaScript对象,就可以在JavaScript中直接使用这个对象了。

拿到一个JSON格式的字符串,我们直接用JSON.parse()把它变成一个JavaScript对象:

javascript
JSON.parse('[1,2,3,true]'); // [1, 2, 3, true]
JSON.parse('{"name":"小明","age":14}'); // Object {name: '小明', age: 14}
JSON.parse('true'); // true
JSON.parse('123.45'); // 123.45
javascript
var s='{"name": "XIAOMING","age": 14,"gender": "M","marriage": false,"grade": null,"skills": ["JS","CPP","NCL","PYTHON"]}'
JSON.parse(s);//Object {name: "XIAOMING", age: 14, gender: "M", marriage: false, grade: null…}