ES12:更好的 JSON 格式化函数

在前端开发中,JSON 是不可或缺的一部分。而在最新的 ECMAScript 12 中,JSON 格式化函数得到了极大的改善,今天我们来学习一下新版的 JSON 格式化函数。

1. 现有的 JSON.stringify 函数存在的问题

在之前的版本中,我们使用 JSON.stringify() 函数将 JavaScript 对象序列化成 JSON 字符串。但是这个函数存在一些问题:

  1. 不支持循环引用:如果对象中存在循环引用,这个函数就会陷入死循环,导致程序崩溃。
  2. 不支持 BigInt 类型:如果对象中存在 BigInt 类型的数据,这个函数会直接报错,无法正确地序列化。

为了解决这些问题,ECMAScript 12 引入了一个新的函数,JSON.stringify() 的增强版,叫做 JSON.stringify() 函数。

2. 使用新的 JSON 格式化函数

2.1 解决循环引用的问题

JSON.stringify() 函数无法处理循环引用。例如,下面这个对象:

const obj = {
  a: 1,
  b: 2
}
obj.c = obj;

如果我们使用 JSON.stringify() 函数对这个对象进行序列化,就会得到一个错误:

JSON.stringify(obj); // Uncaught TypeError: Converting circular structure to JSON

而使用新的 JSON.stringify() 函数,就可以轻松解决这个问题:

const jsonString = JSON.stringify(obj, null, 2, {
  circular: true
});
console.log(jsonString);

这里的 null 表示不需要进行深度转换,2 表示使用 2 个空格进行缩进,{ circular: true } 表示支持循环引用。

输出的结果如下:

{
  "a": 1,
  "b": 2,
  "c": {
    "$ref": "$"
  }
}

2.2 支持 BigInt 类型

在之前的版本中,如果要序列化 BigInt 类型的数据,需要将其转换成字符串或者数组。而使用新版的 JSON.stringify() 函数,可以直接将 BigInt 类型的数据序列化:

const obj = {
  bigInt: BigInt(Number.MAX_SAFE_INTEGER) + BigInt(1)
};
const jsonString = JSON.stringify(obj);
console.log(jsonString); // {"bigInt": 9007199254740992}

2.3 更灵活的格式化选项

新版的 JSON.stringify() 函数支持多种格式化选项,让开发者可以更灵活地控制序列化的结果。

例如,使用 JSON.stringify() 函数传入两个参数,可以去除 JSON 字符串中的空格和换行符:

const obj = {
  a: 1,
  b: 2,
  c: {
    d: 3,
    e: 4,
  }
}
const jsonString = JSON.stringify(obj, null);
console.log(jsonString);

输出结果如下:

{"a":1,"b":2,"c":{"d":3,"e":4}}

使用 JSON.stringify() 函数传入三个参数,可以添加缩进,方便观察:

const jsonString = JSON.stringify(obj, null, 2);
console.log(jsonString);

输出结果如下:

{
  "a": 1,
  "b": 2,
  "c": {
    "d": 3,
    "e": 4
  }
}

使用 JSON.stringify() 函数传入第四个参数,可以自定义格式化选项:

const jsonString = JSON.stringify(obj, null, 2, {
  prefix: '>>> '
});
console.log(jsonString);

输出结果如下:

>>> {
>>>   "a": 1,
>>>   "b": 2,
>>>   "c": {
>>>     "d": 3,
>>>     "e": 4
>>>   }
>>> }

3. 总结

新版的 JSON.stringify() 函数在解决循环引用、支持 BigInt 类型等方面比之前的版本更加完善。同时,格式化选项更加灵活,让开发者可以自定义序列化的结果。在实际的前端开发中,我们可以更加轻松地处理 JSON 格式的数据,提高开发效率。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/659df49dadd4f0e0ff716574


纠错反馈