JSON 知识点
2018-08-29 本文已影响0人
雪樰
JSON 的可以表示的类型
- 简单类型:数值 字符串 布尔 null
- 对象
- 数组
JSON 中没有 undefined
JSON 与 JS 字符串的区别
- JSON 必须使用 ""
JSON 与 JS 字面量的区别
- 没有声明变量来保存字面量,JSON 中没有变量的概念
- 没有末尾分号,因为不是 JS 语句
- 字面量的属性名称必须要有 ""
解析
- eval()
JSON 的早期解析器,JS 函数 eval() - JSON.parse("JSON 字符串")
- ES5 定义全局对象 JSON
- JSON.parse("JSON 字符串") 返回 JS 对象
序列化
- JSON.stringify(JS 对象)
- ES5 定义全局对象 JSON
- JSON.stringify(JS 对象) 返回 JSON 字符串
- toJSON() 对象方法
前提是 JSON.stringify(JS 对象) 的时候,这个对象内部定义了 toJSON
JSON.parse() 参数
JSON.parse("JSON 字符串", 还原函数)(见示例)
JSON.stringify() 参数
- 过滤器
- JSON.stringify(JS 对象, ["name", "age"]),返回的字符串中只包含 name 和 age 属性
- JSON.stringify(JS 对象, 函数)(见示例)
- 选项:控制结果中的缩进和空白符
- JSON.stringify(JS 对象, null, 4),缩进 4 个空格
- JSON.stringify(JS 对象, null, "-"),缩进字符 "-"(见示例)
示例
// JSON 对象
{
"name": "Bill",
"age": 10
}
// JSON 数组
[10, "Bill", true]
// JSON.parse("JSON 字符串", 还原函数)
JSON.parse("JSON 字符串", function (key, value) {
if(key == "releaseDate") {
return new Date(value);
}
return value;
});
// 序列化过滤器
JSON.stringify({authors: ["Nikolas", "Bill"], year: 2008, edition: "1.0"}, function (key, value) {
switch(key) {
case "authors":
return value.join(",");
case "year":
return 2018;
case "edition":
// 删除对应的属性
return undefined;
default:
// 保证其他不做修改的值,正常出现
return value;
}
});
// 缩进字符 "-"
{
-"authors": [
--"Nikolas",
--"Bill"
-],
-"year": 2008,
-"edition": "1.0"
}