在前端开发中,JSON 是一种重要的数据格式,它被广泛应用于数据传输和存储。ES12(ECMAScript 2021)中,JSON 对象得到了一些新的改进和扩展,本文将对这些改进和扩展进行详细介绍。
1. JSON 基础
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于 JavaScript 的对象字面量语法。JSON 格式的数据由键值对组成,键和值之间用冒号分隔,键值对之间用逗号分隔,整个数据用花括号括起来。
下面是一个简单的 JSON 示例:
{ "name": "Alice", "age": 25, "isMarried": false, "hobbies": ["reading", "traveling"] }
在 JavaScript 中,可以使用 JSON.parse()
方法将 JSON 格式的字符串转换为对象,例如:
const jsonStr = '{"name":"Alice","age":25,"isMarried":false,"hobbies":["reading","traveling"]}'; const obj = JSON.parse(jsonStr); console.log(obj.name); // "Alice" console.log(obj.hobbies[0]); // "reading"
同样,可以使用 JSON.stringify()
方法将对象转换为 JSON 格式的字符串:
const obj = { name: "Alice", age: 25, isMarried: false, hobbies: ["reading", "traveling"] }; const jsonStr = JSON.stringify(obj); console.log(jsonStr); // '{"name":"Alice","age":25,"isMarried":false,"hobbies":["reading","traveling"]}'
2. JSON 的新特性
2.1. JSON.parse()
的改进
在 ES12 中,JSON.parse()
方法可以接受一种新的参数类型:reviver
函数。这个函数可以在解析 JSON 数据时对每个键值对进行处理,从而实现更加灵活的数据转换。
reviver
函数接受两个参数:键和值。如果键值对需要保留原有的数据类型,可以直接返回值;如果需要进行转换,可以返回一个新的值。下面是一个简单的示例:
// javascriptcn.com 代码示例 const jsonStr = '{"name":"Alice","age":25,"isMarried":false,"hobbies":["reading","traveling"]}'; const obj = JSON.parse(jsonStr, (key, value) => { if (key === "age") { return value.toString(); // 将 age 转换为字符串类型 } if (key === "isMarried") { return value ? "已婚" : "未婚"; // 将 isMarried 转换为中文字符串 } return value; // 其他键值对保留原有数据类型 }); console.log(obj.age); // "25" console.log(obj.isMarried); // "未婚"
2.2. JSON.stringify()
的改进
在 ES12 中,JSON.stringify()
方法也得到了一些新的改进。首先是对 BigInt 类型的支持,可以将 BigInt 类型的数据转换为 JSON 格式的字符串:
const bigIntNum = BigInt(Number.MAX_SAFE_INTEGER) + BigInt(1); const jsonStr = JSON.stringify(bigIntNum); console.log(jsonStr); // "9007199254740993n"
其次是对 Map 和 Set 类型的支持,可以将 Map 和 Set 类型的数据转换为 JSON 格式的数组:
const map = new Map([["name", "Alice"], ["age", 25]]); const set = new Set(["reading", "traveling"]); const obj = { map, set }; const jsonStr = JSON.stringify(obj); console.log(jsonStr); // '{"map":[["name","Alice"],["age",25]],"set":["reading","traveling"]}'
最后是对 Date 类型的支持,可以将 Date 类型的数据转换为 JSON 格式的字符串:
const date = new Date(); const obj = { date }; const jsonStr = JSON.stringify(obj); console.log(jsonStr); // '{"date":"2022-01-01T00:00:00.000Z"}'
3. 总结
ES12 中的 JSON 对象扩展了 JSON.parse()
和 JSON.stringify()
方法的功能,使其更加灵活和实用。在实际开发中,可以根据具体需求选择合适的方法和参数,从而实现更加方便和高效的数据转换和处理。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6564d5dcd2f5e1655de3b9a8