关于JSON序列化你不知道的事

JSON序列化

1.JSON.stringify()与JSON.parse()

在javascript中可以使用JSON.stringify()将一个对象转化为json字符串,相应的也可以使用JSON.parse()将一个json字符串转化为对象。

JSON.stringify(value, replacer, space])
参数说明:

  • value: 必需, 要转换的对象或数组

  • replacer: 可选,用于转换结果的函数或数组。如果 replacer 为函数,则 JSON.stringify 将调用该函数,并传入每个成员的键和值。使用返回值而不是原始值。如果此函数返回 undefined,则排除成员。根对象的键是一个空字符串:“”。如果 replacer 是一个数组,则仅转换该数组中具有键值的成员。成员的转换顺序与键在数组中的顺序一样。当 value 参数也为数组时,将忽略 replacer 数组。

  • space: 可选,文本添加缩进、空格和换行符,如果 space 是一个数字,则返回值文本在每个级别缩进指定数目的空格,如果 space 大于 10,则文本缩进 10 个空格。space 也可以使用非数字,如:\t。

JSON.parse(text, reviver)
参数说明:

  • text:必需, 一个有效的 JSON 字符串。
  • reviver: 可选,一个转换结果的函数, 将为对象的每个成员调用此函数。

2. 特殊的转换规则

  1. 值为函数的属性,不会被转换
let obj = {
 name: 'pp',
 fun: function(){
   return 3;
 },
}
console.log(JSON.stringify(obj))
// 输出 {"name":"pp"}
  1. 值为undefined的属性,不会被转换
let obj = {
 name: 'pp',
 age: undefined
}
console.log(JSON.stringify(obj))
// 输出{"name":"pp"}
  1. 值为null的属性,会被转正常转换
let obj = {
 name: 'pp',
 age: null
}
console.log(JSON.stringify(obj))
// 输出{"name":"pp","age":null}

3.toJSON属性

若在对象中显式定义了toJSON属性,该属性的值为一个返回对象的函数,json序列化该对象,将得到序列化函数中返回对象的json字符串

let obj = {
  name: 'pp',
  toJSON: function(){
    return {
      address: "beijing"
    }
  }
}
console.log(JSON.stringify(obj))
// 输出{"address":"beijing"}

4.Json序列化类的实例

当我们序列化一个类的实例实,只会转化他的dataValues属性

class Cat {
  constructor(name){
    this.name = name
  }
  speak(){
    console.log(`my name is ${this.name}`)
  }
}
let kitty = new Cat('kitty')
console.log(JSON.stringify(kitty))
// 输出{"name":"kitty"}
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值