JSON 转 JavaScript 对象转换器

严格 JSON 可以用 JSON.parse 转换为 JavaScript 对象。JavaScript 对象字面量则需要先整理一遍才能成为合法 JSON。

在 JavaScript 里转换 JSON

如果输入已经是合法 JSON,最安全的转换器是 JSON.parse(jsonText)。它会返回普通的 JavaScript 对象、数组、字符串、数字、布尔或 null,并且不会执行任何代码。

JSON 输入

{ "name": "Ada", "active": true, "skills": ["math", "notes"] }

JavaScript 用法

const user = JSON.parse(jsonText); console.log(user.name);

对象字面量输入则不一样

{ name: 'Ada', active: true } 这样的 JavaScript 对象字面量不是 JSON。在用 JSON.parse 之前,要先修复未加引号的键、把单引号换成双引号、去掉注释和尾随逗号。

何时不要用 eval

不要用 eval 把未知文本变成对象。eval 会执行代码,而 JSON.parse 只解析数据 —— 这正是严格 JSON 在 API 负载、配置、日志和粘贴片段中更安全的原因。

边界情况:日期、undefined、函数

JSON 没有 Date、undefined、函数这些类型。日期通过 ISO 字符串往返;undefined 会在 stringify 时被丢弃;函数完全无法表示。如果 JavaScript 对象里包含这些值,转换出来的 JSON 只是一个有损快照 —— 必要时,在 JSON.parse 里通过 reviver 函数显式恢复类型。

TypeScript 与类型推断

JSON.parse 的返回类型是 'any',因为解析器无法提前知道形状。要获得带类型的访问,可以在用 zod、io-ts 这样的 schema 库校验后写 JSON.parse(text) as User;也可以用本站的 JSON 转 TypeScript 工具,从样例生成接口。

反向:对象转 JSON

JSON.stringify(value, null, 2) 从 JavaScript 值生成格式化的 JSON。它会默默丢弃 undefined、函数和 Symbol 键;遇到循环引用会抛错。第二个参数可以传 replacer 函数来控制保留哪些字段 —— 在把对象发出去之前剥离内部细节时很有用。