ECMAScript 2019(ES10)的 Object.prototype 的方法序列化和反序列化 JSON 格式的详解

阅读时长 4 分钟读完

在前端开发中,经常需要将 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 对象。它接受一个字符串作为参数,返回一个对象。

在上面的例子中,我们将一个 JSON 格式的字符串解析成了一个 JavaScript 对象。

JSON.stringify()

JSON.stringify() 方法用于将一个 JavaScript 对象转换成 JSON 格式的字符串。它接受一个对象作为参数,返回一个字符串。

在上面的例子中,我们将一个 JavaScript 对象序列化成了一个 JSON 格式的字符串。

应用示例

序列化和反序列化

-- -------------------- ---- -------
----- --- - -
  ----- --------
  ---- ---
  ------- ---------- -
    ------ - ----- ----------------------- -
  -
-

----- ---- - -------------------
----------------- -- ----------------

----- ---- - ----------------
----------------- -- - ----- ------- -

在上面的例子中,我们定义了一个具有 toJSON() 方法的对象 obj,并将它序列化成了 JSON 格式的字符串 json。然后,我们将 json 字符串反序列化成了一个 JavaScript 对象 obj2

序列化时增加缩进

-- -------------------- ---- -------
----- --- - - ----- -------- ---- -- -
----- ---- - ------------------- ----- --
-----------------
--
-
  ------- --------
  ------ --
-
--

在上面的例子中,我们将 obj 对象序列化成了 JSON 格式的字符串,并使用第二个参数指定了缩进字符数为 2。这样,生成的 JSON 字符串就具有了可读性。

序列化时排除属性

在上面的例子中,我们将 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

纠错
反馈