在前端开发中,经常需要将 JavaScript 对象转换成 JSON 格式,或者将 JSON 格式转换成 JavaScript 对象。ECMAScript 2019(ES10)中新增了一些 Object.prototype 的方法,可以方便地实现这些转换操作。
方法介绍
Object.prototype.toJSON()
toJSON()
方法是一个可选的方法,用于将一个 JavaScript 对象转换成 JSON 格式的字符串。当一个对象被序列化时,如果它有 toJSON()
方法,则该方法会被调用,并将其返回值作为序列化结果。
-- -------------------- ---- ------- ----- --- - - ----- -------- ---- --- ------- ---------- - ------ - ----- ----------------------- - - - ----- ---- - ------------------- ----------------- -- ----------------
在上面的例子中,obj
对象有一个 toJSON()
方法,它返回一个只包含 name
属性的新对象。当我们调用 JSON.stringify(obj)
方法时,toJSON()
方法会被自动调用,返回的新对象会被序列化成 JSON 格式的字符串。
JSON.parse()
JSON.parse()
方法用于将一个 JSON 格式的字符串转换成对应的 JavaScript 对象。它接受一个字符串作为参数,返回一个对象。
const json = '{"name":"Alice","age":18}' const obj = JSON.parse(json) console.log(obj) // { name: 'Alice', age: 18 }
在上面的例子中,我们将一个 JSON 格式的字符串解析成了一个 JavaScript 对象。
JSON.stringify()
JSON.stringify()
方法用于将一个 JavaScript 对象转换成 JSON 格式的字符串。它接受一个对象作为参数,返回一个字符串。
const obj = { name: 'Alice', age: 18 } const json = JSON.stringify(obj) console.log(json) // {"name":"Alice","age":18}
在上面的例子中,我们将一个 JavaScript 对象序列化成了一个 JSON 格式的字符串。
应用示例
序列化和反序列化
-- -------------------- ---- ------- ----- --- - - ----- -------- ---- --- ------- ---------- - ------ - ----- ----------------------- - - - ----- ---- - ------------------- ----------------- -- ---------------- ----- ---- - ---------------- ----------------- -- - ----- ------- -
在上面的例子中,我们定义了一个具有 toJSON()
方法的对象 obj
,并将它序列化成了 JSON 格式的字符串 json
。然后,我们将 json
字符串反序列化成了一个 JavaScript 对象 obj2
。
序列化时增加缩进
-- -------------------- ---- ------- ----- --- - - ----- -------- ---- -- - ----- ---- - ------------------- ----- -- ----------------- -- - ------- -------- ------ -- - --
在上面的例子中,我们将 obj
对象序列化成了 JSON 格式的字符串,并使用第二个参数指定了缩进字符数为 2。这样,生成的 JSON 字符串就具有了可读性。
序列化时排除属性
const obj = { name: 'Alice', age: 18 } const json = JSON.stringify(obj, ['name']) console.log(json) // {"name":"Alice"}
在上面的例子中,我们将 obj
对象序列化成了 JSON 格式的字符串,并使用第二个参数指定了要序列化的属性列表。这样,生成的 JSON 字符串中就只包含了 name
属性。
总结
ECMAScript 2019(ES10)中新增的 Object.prototype 的方法可以方便地实现 JavaScript 对象和 JSON 格式之间的转换。toJSON()
方法可以定制对象的序列化过程,JSON.stringify()
方法可以将一个 JavaScript 对象序列化成 JSON 格式的字符串,JSON.parse()
方法可以将一个 JSON 格式的字符串解析成对应的 JavaScript 对象。在实际开发中,我们可以根据需求灵活使用这些方法,提高开发效率。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65d1d414add4f0e0ffa6ddcd