本文已参加 [新人创作礼] 活动,一起开启掘金创作之路。
JSON对象
首先我们应该知道JSON是一种文本协议,全局作用域下JSON,名为JSON,是Object对象。
一. 基本信息
-
JSON格式
- JSON是一种轻量级的、基于文本的、与语言无关的语法,用于定于数据交换格式
- 来源于ECMAScript编程语言,但是独立于编程语言
-
对象字面量
- 是创建对象的一种快捷方式,英文名:object literal
- 对应还有:函数字面量,数组字面量等额定
- 字面量的性能优于使用new创建
-
JSON特征
- JSON就是一串字符串,使用特定的符号标注
- {} 双括号表示对象
- [] 中括号表示数组
- ""双引号内是属性键或值
-
JSON键
- 只能是字符串
- 必须双引号包裹
-
JSON值
-
object
-
array
-
number
-
string
-
true
-
false
-
null
-
二. JSON.parse()
- 作用:将数据转换为 JavaScript 对象
- 语法:
JSON.parse(text[, reviver])
参数说明:
- text: 必需, 一个有效的 JSON 字符串。
- reviver: 可选,一个转换结果的函数, 将为对象的每个成员调用此函数。
注意点:
- 遍历顺序:
- this指向: 指向当前上文最近对象
三. JSON.stringify()
- 作用:将 JavaScript 值转换为 JSON 字符串
- 语法:
JSON.stringify(value[, replacer[, space]])
参数说明:
-
value:
必需, 要转换的 JavaScript 值(通常为对象或数组)。
-
replacer:
可选。过滤属性或者处理值。
-
如果 replacer 为函数,则 JSON.stringify 将调用该函数,并传入每个成员的键和值。使用返回值而不是原始值。如果此函数返回 undefined,则排除成员。根对象的键是一个空字符串:""。
-
如果 replacer 是一个数组,则仅转换该数组中具有键值的成员。成员的转换顺序与键在数组中的顺序一样。
-
如果该参数为null或者未提供,则对象所有的属性都会被序列化。
-
-
space:
可选,文本添加缩进、空格和换行符。
- 如果参数是个数组,它代表有多少的空格;上限为10。该值若小于1,则意味着没有空格;
- 如果该参数为字符串:(当字符串长度超过10个字母,取其前10个字母),该字符串将被作为空格;
- 如果该参数没有提供:(或者为null),将没有空格。
规则:undefined、任意的函数、symbol
- 作为对象属性值,自动忽略。
- 作为数组,序列化返回null
- 单独序列化时,返回undefined
其他规则
- Date 返回ISO字符串
- 循环引用报错
- NaN,Infinity,null 都会作为null
- BigInt报错
- Map/Set/WeakMap等对象,仅序列化可枚举属性
四. JSON.toJSON()
- 作用:如果对象拥有toJSON方法,toJSON会覆盖对象默认的序列化行为
var product = {
"name": "牙膏",
"count": 10,
"orderDetail": {
"createTime": 1632996519781,
"orderId": 8632996519781
},
toJSON(){
return {
name: "牙膏"
}
}
}
console.log(JSON.stringify(product)) // '{"name":"牙膏"}