JSON是独立于JavaScript的语言无关数据格式,仅支持null、boolean、number、string、array、object六种类型,不支持函数、undefined等;JSON.parse()和JSON.stringify()是原生纯数据转换方法,严格遵循双引号、无注释、无尾逗号等语法规则。
JSON 是 JavaScript 的一个子集,但不是 JavaScript 代码
JSON(JavaScript Object Notation)语法源自 JavaScript,但它是独立的、语言无关的数据格式。它只支持
、
、
、
、
和
六种类型,不支持函数、
、
、
或循环引用。这意味着:
会直接报错
——因为
不是合法 JSON。
和
是唯一标准解析/序列化方法
浏览器
和 Node.
js
原生提供这两个函数,不依赖外部库。它们不执行代码、不调用构造函数、不处理原型链,纯数据转换:
只接受字符串输入;传入对象会抛
遇到不可序列化的值(如
、
、
)会静默忽略该属性(对象中)或转为
(数组中)
第二个参数可传
函数或数组,用于过滤或修改键值;第三个参数可传缩进空格数(如
),仅影响格式,不影响语义
示例:
常见解析失败原因:空格、BOM、单引号、尾逗号、注释
JSON 格式严格,以下写法全部非法:
用单引号包裹字符串:
→ 必须双引号
末尾多逗号:
→ 解析失败
含 UTF-8 BOM(
)开头的响应体 →
报错
HTTP 响应头未设
,但后端返回了 HTML 错误页(如 500 页面)→ 实际拿到的是 HTML 字符串,不是 JSON
调试建议:先
确认是不是字符串,再检查前几个字符是否为
或
。
Comet AI 浏览器
下载 Comet AI 浏览器,体验由 Perplexity AI 驱动的革命性上网方式。内置 AI 助手可实时总结网页、跨标签页对比信息、自动执行任务。告别繁琐操作,让 AI 成为你的浏览副驾,大幅提升研究与工作效率。支持 Windows、macOS、Android 和 iOS。
下载
立即学习
“
Java免费学习笔记(深入)
”;
需要自定义行为时,别改
,用封装函数处理边界
比如后端返回日期字符串
,想自动转成
对象;或遇到
字段想默认填空字符串。这时不该 monkey patch
,而应:
用
的 reviver 参数做类型修复
对
字段做 fallback,应在业务层处理,而非试图让
输出
需序列化
、
、
等类型时,必须手动在
中转换,例如:
真正容易被忽略的是:JSON 规范不定义时间、二进制、大数(
)的表示方式,这些都得靠业务协议约定,不能指望解析器自动理解。
nullbooleannumberstringarrayobjectundefinedDateRegExpJSON.parse('{ "x": undefined }')SyntaxError: Unexpected token u in JSON at position 9undefinedJSON.parse()JSON.stringify()JSON.parse()TypeError: JSON.parse requires a stringJSON.stringify()functionundefinedSymbolnullreplacer2JSON.stringify({ a: 1, b: undefined, c: () => {} }, null, 2)
// 输出:
// {
// "a": 1
// }'{"key":"value"}'{"a":1,}\uFEFFJSON.parse()Unexpected tokenContent-Type: application/jsonconsole.log(typeof data, data.slice(0, 50)){[JSON.parse"2024-06-15T12:34:56Z"DatenullJSON.parseJSON.parse(str, (key, value) => { ... })undefinedJSON.stringifyundefinedDateMapSetreplacerJSON.stringify(new Date(), (k, v) => v instanceof Date ? v.toISOString() : v)BigInt