JSON

103 阅读2分钟

JSON是一种通用数据格式,很多语言都有解析和序列化JSON的内置能力。

JSON语法支持三种类型的值。(对象和数组一般会用做JSON数组的顶级结构,以便创建大型复杂的数据结构)。

  1. 简单值:字符串,数值,布尔值,null。
  • 如下皆为有效的JSON
  • 字符串:"javaScript" (必须是双引号,单引号会导致语法错误)
  • 数值:5
  • true
  • null
  1. 对象: 例:{"name":"zhangsan","age":16,"school":{"name":"zb","location":"shanxi"}}
  • JSON中没有变量
  • 最后没有分号(因为不是JavaScript语言)
  • key值必须带双引号
  • value值可以是对象,数组,字符串,number,布尔,null
  1. 数组: 例:["zhangsan",16,{"name":"zb","location":"shanxi"},true]

JSON.stringify()把一个JavaScript对象序列化为一个JSON字符串,默认输出不包含空格和缩进的字符串。因为JSON是语言无关的纯数据规范,因此一些特定于 JavaScript 的对象属性会被 JSON.stringify 跳过。

  1. 可序列化并过滤数据
let person = {
    "name":"zhangsan",
    "age":16,
    "sex":"boy"
}
let jsonPerson1 = JSON.stringify(person,["name","age"]) // 只有name和age的JSON字符串
let jsonPerson2 = JSON.stringify(person,(key,value)=>{
     switch(key) {
         case "age":
         return 18;
         case "sex"
         return undefined;
         default:
         return value
     }
}) // 更改了部分value的JSON字符串

// 第三个参数控制缩进和空格,①为数值时表示每一级缩进的空格数,最大值为10,超过10 则默认为10.②为字符串时,则会使用该字符串而不是空格来缩进。
 let jsonPerson3 = JSON.stringify(person,null,"--"// {
// --"name":"zhangsan",
// --"age":16,
// --"sex":"boy"
// }

2.toJSON()方法,有时需要在JSON.stringify()之上自定义JSON序列化。此时可以在序列化的对象中添加toJSON()方法,序列化时会基于这个方法返回适当的JSON表示。

JSON.parse()将JSON字符串转换为JavaScript对象 JSON.parse()方法也可以额外接受一个函数作为参数,函数用来处理将字符串转换为JavaScript需要的特殊格式数据,例如可将时间字符串1137075575000转换为时间对象new Date(1137075575000),如果还原函数返回undefined,会删除相应的键。