JSON格式,(简写JavaScript Object Notation),是一种用于数据交换的文本格式,书写简单。
基于JavaScript原生语法,能够序列化对象、数组、数值、字符串、布尔值和 null。
在ES5中,增加了一个JSON对象,专门用来处理JSON格式的数据。
JSON是一个对象,但只有两个方法:parse
和 stringify
,不能作为构造函数,也无属性。
typeof JSON === 'object'
JSON.parse
JSON.parse()
用来解析JSON字符串,得到对应的JavaScript值或对象。
JSON.parse('{}') // {}
JSON.parse('true') // true
JSON.parse('null') // null
JSON.parse 语法
JSON.parse(text[, reviver])
- text:要被解析成的字符串。
如果传入数字则会转换成十进制数字输出。
如果传入布尔值则直接输出。
如果传入null则输出null。
不支持其他类型的值,否则报错。 - reviver: 可选,转换器, 可以用来修改解析生成的原始值。
返回值: JavaScript对象/值, 对应给定JSON文本的对象/值。
reviver 参数
reviver函数,用于转换处理解析到的JavaScript值,处理完后返回最终的结果。
转换过程:
- 解析的值本身和它可能包含的所有属性,按照一定遍历顺序分别调用reviver函数,属性名和值作为参数两个参数
key
和value
传入。
遍历顺序:按照层级,从内往外遍历,最终到达最顶层,则是解析值本身。 - reviver返回undefined,则删除该对象,如果返回了其他值,则该值会成为当前属性的新值。
- 当遍历到最顶层时,因为没有属性了,参数key是空字符串
''
,参数value则是当前解析值。
对于reviver函数的两个参数 key
和 value
,不同的数据类型:
- 基本值类型数据(string、number、boolean)和null,以及空对象
{}
和空数组[]
:
则key是空字符串,value是对应解析值。
因为已经是最顶层,并没有别的属性。 - Object对象:
则key和value都存在,与属性名和值各自对应。
最顶层会返回一个参数key为空的值。 - 数组:
key对应数组索引,value对应元素值。
最顶层会返回一个参数key为空的值。
基本类型的转换:
JSON.parse('5', function (key, value) {
console.log(`key:${key}, value:${value}`)
})
// key:, value:5
JSON.parse('null', function (key, value) {
console.log(`key:${key}, value:${value}`)
})
// key:, value:null
JSON.parse('{}', function (key, value) {
console.log(`key:${key}, value:`, value)
})
// key:, value:{}
Object对象和数组:
JSON.parse('[1, 2]', function (key, value) {
console.log(`key:${key}, value:`, value)
})
// key:0, value: 1
// key:1, value: 2
// key:, value: (2) [empty × 2]
JSON.parse('{ "user": "张三", "info": { "age": 25, "sex": 1