什么是 JSON
- JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)
- JSON 是轻量级的文本数据交换格式
- JSON 独立于语言:JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。 目前非常多的动态(PHP,JSP,.NET)编程语言都支持JSON。
- JSON 具有自我描述性,更易理解。
json本质上是一串长字符(一串有结构的字符串),在网络中,2进制数据是数据传输的主体,而字符串可以很容易的转换成2进制数据,所以json文件可以大量快速的在网络中传输数据。
JSON.stringify
JSON.stringify
的完整语法:
let json = JSON.stringify(value[, replacer, space])
value
要编码的值。
replacer
要编码的属性数组或映射函数 function(key, value)。
space
用于格式化的空格数量。
大部分情况,JSON.stringify
仅与第一个参数使用
let obj = {
name : "Tom",
age : 18,
user :{
type : "object"
}
}
// 转换一个对象
let json = JSON.stringify(obj);
console.log(json);
可以看到obj对象直接转换成了一串字符
console.log(JSON.stringify(obj,["name"]));
第二个参数指定了name属性,最后只json化了那么属性
console.log(JSON.stringify(obj,["name","user"]));
对于嵌套的对象,内部对象的属性也需要指定属性才能json化
console.log(JSON.stringify(obj,["name","age","user","type"]));
可以看到全部指定后和第一个打印结果一致,但是以上的结果都是一串长字符,结构并不清晰,所以这里用到第三个参数replace(空格数)格式化美化json
console.log(JSON.stringify(obj,null,2));
可以看到结果直接展开,便于理解。
JSON.parse
let value = JSON.parse(str, [reviver]);
str
要解析的 JSON 字符串。
reviver
可选的函数 function(key,value),遍历一遍json内的所有键值对,并返回要解析的键值
console.log(JSON.parse(json));
console.log(JSON.parse(json,function(key,value){
//console.log(key,":",value);
if(key == "age"){
console.log(value);
}
return value; // 必须返回value值,否则无法解析json
}));
可以看到解析成了对象,且可以对每个值进行单独操作
总结
- JSON 是一种数据格式,具有自己的独立标准和大多数编程语言的库。
- JSON 支持 object,array,string,number,boolean 和
null
。 - JavaScript 提供序列化(serialize)成 JSON 的方法 JSON.stringify 和解析 JSON 的方法 JSON.parse。
- 这两种方法都支持用于智能读/写的转换函数。
- 如果一个对象具有
toJSON
,那么它会被JSON.stringify
调用。
完整代码和结果
let obj = {
name : "Tom",
age : 18,
user :{
type : "object"
}
}
// 转换一个对象
let json = JSON.stringify(obj);
console.log(json);
console.log(JSON.stringify(obj,["name"]));
console.log(JSON.stringify(obj,["name","user"]));
console.log(JSON.stringify(obj,["name","age","user","type"]));
console.log(JSON.stringify(obj,null,2));
console.log(JSON.parse(json));
console.log(JSON.parse(json,function(key,value){
//console.log(key,":",value);
if(key == "age"){
console.log(value);
}
return value;// 必须返回value值,否则无法解析json
}));