JS红皮书解读之JSON

关于JSON,最重要的是理解它是一种数据格式,不是语言。
而且,不止JS可以解析和序列化它,其他语言也可以。


语法
1、JSON可以表示三种类型的值:
(1)简单值(字符串——一定要用双引号、数值、布尔值、null),但不支持undefined
(2)对象
(3)数组
2、JSON不支持变量、函数或对象实例


序列化
JSON.stringify()——将一个JS对象序列化为一个JSON字符串
默认情况下,JSON.stringify()输出的字符串不包含空格或缩进,并且值为undefined的任何属性也会被跳过。

JSON.stringify()的三个参数

  • 第一个参数:需要序列化的对象
  • 第二个参数:过滤器(数组或函数)
    (1)过滤器是数组类型
let data={
      "name":"webchen",
      year:2018,
      content:"javascript"

    }

    let newdata=JSON.stringify(data,["name","content"])

    console.log(data) //{name: "webchen", year: 2018, content: "javascript"}
    console.log(newdata)  //{"name":"webchen","content":"javascript"}

(2)过滤器是函数类型

    let data={
      "name":"webchen",
      year:2018,
      content:"javascript"

    }

    let newdata=JSON.stringify(data,(key,value)=>{
      //key一定要是字符串
      switch(key){
        case "name":return value.split("")
        case "year":return 2020
        default:return value
      }

    }) 
    console.log(newdata)
//{"name":["w","e","b","c","h","e","n"],"year":2020,"content":"javascript"}
  • 第三个参数:缩进字符(表示是否保留缩进)
    (1)如果只是数字,则表示空格的数量,最多10,超出10则置为10
    let newdata=JSON.stringify(data,null,4)
    console.log(newdata)
    let newdata1=JSON.stringify(data,null,11)
    console.log(newdata1)
JS红皮书解读之JSON_第1张图片
image.png

(2)如果是字符串,缩进字符则是该字符串

let newdata=JSON.stringify(data,null,"-=-==--")
    console.log(newdata)
JS红皮书解读之JSON_第2张图片
image.png

toJSON()方法——返回自身的JSON数据格式
作用:此方法可以返回任何值,如果使用此方法的对象是顶级对象(没有嵌套在其他对象里),值是undefined就返回undefined,否则返回null(被嵌套在其他对象中)

let data={
      "name":"webchen",
      year:2018,
      content:"javascript",
      toJSON:function () {
        return this.name
      }
    }

序列化的内部顺序(至关重要)
(1)toJSON()存在且是有效值,则调用,否则返回对象本身
(2)有第二个参数,则用该过滤器
(3)对(2)进行序列化
(4)有第三个参数,序列化


JSON.parse()——将一个 JSON 字符串转换为对象

  • 参数1:JSON 字符串
  • 参数2:可选,一个函数(也是过滤器)

这个书上没详细讲。

(完)

你可能感兴趣的:(JS红皮书解读之JSON)