JSON 知识点

2018-08-29  本文已影响0人  雪樰

JSON 的可以表示的类型

  1. 简单类型:数值 字符串 布尔 null
  2. 对象
  3. 数组

JSON 中没有 undefined

JSON 与 JS 字符串的区别

  1. JSON 必须使用 ""

JSON 与 JS 字面量的区别

  1. 没有声明变量来保存字面量,JSON 中没有变量的概念
  2. 没有末尾分号,因为不是 JS 语句
  3. 字面量的属性名称必须要有 ""

解析

  1. eval()
    JSON 的早期解析器,JS 函数 eval()
  2. JSON.parse("JSON 字符串")
    1. ES5 定义全局对象 JSON
    2. JSON.parse("JSON 字符串") 返回 JS 对象

序列化

  1. JSON.stringify(JS 对象)
    1. ES5 定义全局对象 JSON
    2. JSON.stringify(JS 对象) 返回 JSON 字符串
  2. toJSON() 对象方法
    前提是 JSON.stringify(JS 对象) 的时候,这个对象内部定义了 toJSON

JSON.parse() 参数

JSON.parse("JSON 字符串", 还原函数)(见示例)

JSON.stringify() 参数

  1. 过滤器
    1. JSON.stringify(JS 对象, ["name", "age"]),返回的字符串中只包含 name 和 age 属性
    2. JSON.stringify(JS 对象, 函数)(见示例)
  2. 选项:控制结果中的缩进和空白符
    1. JSON.stringify(JS 对象, null, 4),缩进 4 个空格
    2. 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"
}
上一篇 下一篇

猜你喜欢

热点阅读