JSON 是一种轻量级的数据格式,可以方便的表示复杂的数据结构。
一个 JSON 文件中可以表示字符串、数值、对象( JSON对象 )、数组、布尔值、null,不可以表示undefined、函数和日期
{
"name" : "jingzhao",
"age" : 30,
"info" : {
"weight" : 155
},
"hobbies": [ "read", "eat" ],
"marriage" : true,
"video" : null
}
语法
-
简单值
一个 JSON 文件可以是字符串、数值、布尔值、null
"this is JSON txt"
-
对象
整个文件最外层是
{}
{ "name" : "jingzhao", "age" : 30 }
-
数组
整个文件最外层是
[]
["read", "eat"]
JavaScript字面量与JSON区别
-
JSON文件中
key
需要双引号
包裹(重要重要很重要),最后也不需要分号{ "name" : "jingzhao" }
JavaScript字面量中
key
可以不加引号,value
可以是单引号,分号可加可不加{ name: 'jingzhao' }
-
JSON中没有变量
{ "name" : "jingzhao" }
Javascript字面量需要一个变量存储
const you = { "name" : "jingzhao" }
JavaScript的JSON对象
-
JavaScript对象序列化为JSON字符串
JSON.stringify(value[, replacer[, space]])
-
value (要序列化的对象)
let you = { "name" : "jingzhao" } let jsonText = JSON.stringify(you);
-
replacer (处理器,可以是数组或者函数)
let you = { "name" : "jingzhao", "age" : 30, "info" : { "weight" : 155 }, "hobbies": [ "read", "eat" ], "marriage" : true, "video" : null } let jsonText1 = JSON.stringify(you,['name','age']); let jsonText2 = JSON.stringify(you,(key,value)=>{ if (typeof value === 'string') { return undefined; } return value; });
-
space 设置缩进(同时插入换行符),默认是输出不包含空格或缩进的 (缩进最大值会变为 10)
let you = { "name" : "jingzhao", "age" : 30, "info" : { "weight" : 155 }, "hobbies": [ "read", "eat" ], "marriage" : true, "video" : null } let jsonText1 = JSON.stringify(you,null,4);
还可以插入字符,一般不会用到
let you = { "name" : "jingzhao", "age" : 30, "info" : { "weight" : 155 }, "hobbies": [ "read", "eat" ], "marriage" : true, "video" : null } let jsonText1 = JSON.stringify(you,null,'->->');
自定义toJSON方法,
不能用箭头函数
var obj = { data: 'data', toJSON (key) { if (key) return `Now I am a nested object under key '${key}'`; else return this; } }; JSON.stringify(obj); // '{"data":"data"}' JSON.stringify({ obj }); // '{"obj":"Now I am a nested object under key 'obj'"}' JSON.stringify([ obj ]); // '["Now I am a nested object under key '0'"]'
-
-
JSON 字符串解析为 JavaScript 对象
JSON.parse(text[, reviver])
-
text (JSON对象字符串 ,格式不对会报错)
JSON.parse('[1, 2, 3, 4, ]'); // 报错 JSON.parse('{"foo" : 1, }'); // 报错 JSON.parse("{'foo': 1}"); // 报错
-
reviver (还原函数)
JSON.parse('{"p": 5}', (key, value) => typeof value === 'number' ? value * 2 // return value * 2 for numbers : value // return everything else unchanged );
还原函数返回
undefined
删除相应的key
const aaa = JSON.parse('{"p": 5,"a": "string"}', (key, value) =>{ if(typeof value === "string"){ return undefined }else{ return value } }); // { p: 5 }
-