什么是 JSON
JSON 是一种基于文本的轻量级的数据交换格式。它可以被任何编程语言读取和作为数据格式来传递。
在项目开发中,我们使用 JSON 作为前后端数据交换的方式:在前端将一个符合 JSON 格式的数据结构序列化为 JSON 字符串,再传递到后端;后端解析后生成对应的数据结构,以此来实现前后端数据的传递。
JSON 使用 JavaScript 语法,但是 JSON 格式仅仅是一个文本,文本可以被任何编程语言读取并作为数据格式传递。
JSON 中对象格式更加严格,比如 JSON 中的属性值不能为函数,不能出现 NaN 这样的属性值等,因此大多数的 JS 对象是不符合 JSON 对象格式的。
JS 与 JSON 互转
JS 提供了两个函数实现 JS 数据结构和 JSON 格式的转换处理:
JSON.stringify:将符合 JSON 格式的数据结构转换为 JSON 字符串。如果传入的数据结构不符合 JSON 格式,序列化时会做特殊处理(undefined/函数被忽略,NaN/Infinity被转为null)。JSON.parse():将 JSON 格式的字符串解析为 JS 数据结构。如果字符串不是标准 JSON 格式,会抛出错误。
const user = { name: 'Tom', age: 18, greet() { return 'hi' }, tag: undefined };
JSON.stringify(user); // '{"name":"Tom","age":18}'
JSON.parse('{"name":"Tom"}'); // { name: 'Tom' }
补充:常见的注意点:
JSON.stringify第二参数(replacer)和第三参数(space)可以用来过滤字段和美化输出。Date会被转为字符串,丢失类型;如需保留类型,可以在序列化前toJSON钩子或用reviver还原。JSON.stringify不能序列化循环引用,会抛TypeError。- 大对象序列化性能较差,必要时使用
structuredClone或专门的二进制协议(如 Protocol Buffers)。
来源整理自:vue3js.cn 面试官系列



