json 是一种数据交换格式。
在JSON中,一共有几种数据类型:
- number: 和js的 number完全一致;
- boolean: 就是js中的true 或 false;
- string: 就是js的string;
- null: 就是js的null
- array: 就是js的Array 表示方式--[]
- object: 就是js的{...} 表示方式
1. 序列化
JSON的字符串规定必须用双引号"" , Object的键也必须用双引号""
把一个js对象序列化成JSON格式的字符串:
我们通常所说的“json字符串” , 只有两种: json对象、json数组
var xiaozhu = { name: 'xiaozhu', age: 18, height: 1.6, grade: null, skills: ['Javascript','Html','Js'] } var s = JSON.stringify(xiaozhu) console.log(s); // {"name":"xiaozhu","age":18,"height":1.6,"grade":null,"skills":["Javascript","Html","Js"]}
第二个参数用于控制如何筛选对象的键值,如果我们只想输出指定的属性,可以传入Array:
var s1 = JSON.stringify(xiaozhu,['name','skills'], ' ') console.log(s1); { "name": "xiaozhu", "skills": [ "Javascript", "Html", "Js" ] }
还可以传入一个函数,这样对象的每个键值都会被函数有限处理
function convert(key, value) { if (typeof value === 'string') { return value.toUpperCase(); } return value; } JSON.stringify(xiaozhu, convert, ' ');
上面的代码把所有属性值都变成大写:
{ "name": "XIAOZHU", "age": 18, "height": 1.6, "grade": null, "skills": [ "JAVASCRIPT", "HTML", "JS" ] }
2. 反序列化
拿到一个JSON格式的字符串,直接用JSON.parse()把它变成一个js对象:
console.log(JSON.parse('[1,2,3,true]')); // [1, 2, 3, true] console.log(JSON.parse('{"name": "xiaozhu", "age": 14}')); // {name: "xiaozhu", age: 14}
console.log(JSON.parse('true')); // true
JSON.parse() 还可以接收一个函数,用来转换解析出的属性:
var obj = JSON.parse('{"name": "小明", "age": 14}', function(key,value){ if (key === 'name') { return value + '同学'; } return value; }); console.log(JSON.stringify(obj)); // {name: '小明同学', age: 14}