json 对象

92 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第5天,点击查看活动详情

前言

你肯定使用过 json 数据格式进行网络传输。但是在第一代 web 服务时基本是使用 XML 。2006年时指定来 JS 对象简谱即JSON。但其实在2001年就开始使用了。它是一种通用的数据格式。

语法

JSON 中没有变量、函数或对象实例的概念,所有标识都是为了标识结构化数据。JSON 语法支持三种类型的值:

  • 简单值:字符串、数值、bool 和null。但注意 undefined 是不可以的。

简直值可以是一个简单的数值,比如 5或者“hello”。但在MDN中有提到JSON字符串和JS字符串的区别就是:JSON 字符串必须是用双引号,单引号可能会使得语法错误。但现在很多其实不是当作是错误的。

  • 对象:有序键值对,属于复杂的数据类型。

JSON 对象和 JS 的对象是不一样的。比如 JS 对象是需要声明变量,除非是匿名对象。还有一个分号的区别:在JSON最后一个不需要分号。比如下面语法

// JSON 对象
{
	"name":"Tome",
  "age": 18
}

// JS 对象
let person = {
	"name":"Tome",
  "age": 18,
}
  • 数组:数组的值可以是任意类型。第二种复杂数据类型。

JSON 数组和JSON 对象一样也是没有变量,没有分号。当然对象和数组还可以继续组合,组合成更为复杂的数据结构。

解析和序列化

早期使用的时候基本都是使用 eval() 函数进行 JSON解析,解析后作为 JS 对象和数组进行返回。在 ES5 中增加了 JSON 对象,可以更方便的对 JSON 进行解析和序列化。解决了以前经常使用 eval 函数老是解析错误的问题。

  • JSON.stringify() 序列化对象,将 JSON 对象转为 JS 字符串。

经常使用都是直接 JSON.stirngify(str) 。但其实它还支持接受两个参数。这两个参数是用于指定其他序列化 JS 对象的方式。第一个参数是过滤器,第二个参数是用于缩进结果 JSON 字符串。

let person = {
	name:"Tome",
  age: 18,
  school:"xxx小学"
}
let jsonText = JSON.stringif(person, ["name","age"])

上面增加了参数,即过滤器,最后结果输出就是只有 name 和 age 字段。还有一个参数就是一个函数,用于执行操作的。

  • JSON.parse() 解析字符串,将 JS 的JSON 字符串转为 JSON 对象。

简单的 JSON 对象其实也含有很多的知识点。现在经常使用比较多的场景基本就是使用 JSON 格式数据进行数据传输还有对 JSON 解析或序列化的工作。