144. 序列化和反序列化JSON不支持的数据类型

中等难度  -通过 / -执行

显然,JSON.parse() JSON.stringify()不支持JSON data type以外的数据类型。

JSON.stringify({a:1n}) // Error

undefined会被忽略,或者转换为null

JSON.stringify([undefined]) // "[null]"
JSON.stringify({a: undefined }) // "{}"

NaNInfinity也会被当作null处理。

JSON.stringify([NaN, Infinity]) // "[null,null]"
JSON.stringify({a: NaN, b:Infinity}) // "{"a":null,"b":null}"

相信规则请参考MDN

但是有些时候,我们也需要有能力序列化更多的数据类型。

好了,请完成支持以下数据类型的serialize/deserialize函数

  1. primitives (symbol除外)
  2. object literals
  3. array

Object literals 和 array 由上述primitive组成,或者自身nest。

以下代码需要能顺利工作,请据此完成代码。

parse(stringify([1n, null, undefined, NaN])) // [1n, null, undefined, NaN]
parse(stringify({a: undefined, b: NaN}) // {a: undefined, b: NaN}

代码中允许使用JSON.stringify()和JSON.parse()。

注意特例。

(1)
(7)