JSON 极客开发实用工具箱

v2.5 Pro

格式化解析、树状图、TS / Go / Python / Rust / Java 高级代码生成、语义差异对比与 YAML/XML 互转。

100% 浏览器本地解析 · 隐私零上传
开发者特惠 阿里云官方合作专区

阿里云爆款云服务器 · 开发者上云特惠 99元/年起

2核2G/2核4G 高性能轻量服务器、OSS 对象存储与云数据库限时特价,专属通道直达优惠。

输入内容 (JSON / JS 对象 / JSON5):0 字符
高亮格式化结果:0 节点
等待输入格式化...

常用数据序列化格式对比:JSON vs JSON5 vs YAML vs XML

语法严谨度、注释支持、数据开销与各工程场景选型建议。

格式规范键名引号要求尾随逗号与注释数据载荷开销最佳应用场景
标准 JSON必须双引号 ""不支持尾逗号,严禁任何注释极低 (轻量高效)Web RESTful API 数据交互、微服务 RPC 通信
JSON5支持无引号或单引号支持尾随逗号、单行 // 与多行 /* */ 注释低tsconfig.json、Babel/ESLint 等前端工程配置
YAML绝大多数情况免引号基于严格缩进,支持 # 行注释与锚点引用极低 (可读性最强)Kubernetes (k8s) 编排、Docker Compose、CI/CD 流程
XML成对标签包裹支持 <!-- --> 注释与属性语法较高 (闭合标签冗余)SOAP WebService、Java Maven pom.xml、Android 布局

JSON 核心技术与避坑问答 (FAQ)

大整数精度丢失原理、循环引用报错排查及 Unicode 转义规则。

Q1: 为什么 JavaScript 在解析大整数(如 64 位雪花 ID 或订单号)时末尾数字会变 0?

JavaScript 的 Number 类型遵循 IEEE 754 双精度浮点数标准,其能安全精确表达的最大整数为 Number.MAX_SAFE_INTEGER,即 \( 2^{53} - 1 = 9007199254740991 \)(约 16 位数字)。而像分布式雪花算法(Snowflake ID)生成的通常是 18~19 位的 64 位整数,直接使用浏览器原生 JSON.parse() 解析时,超出精度的低位二进制将被强制截断舍入为 0。最佳解决方案:后端在 JSON 序列化时将该字段转为 String 字符串输出;或前端在传输层引入 json-bigint 库进行无损解析。

Q2: 出现 "TypeError: Converting circular structure to JSON" 该如何排查?

当某个对象的属性直接或间接引用了该对象自身(例如 node.parent = parent; parent.child = node;)时,调用 JSON.stringify() 会引发无限递归死循环,引擎便会主动抛出该循环引用异常。解决方法:在序列化前剥离回环引用,或在 JSON.stringify(obj, replacer) 中传入自定义 replacer 函数,使用 WeakSet 记录已遍历过的对象引用并跳过重复项。

Q3: 为什么有时 JSON 中的中文会变成形如 \u4f60\u597d 的 Unicode 转义符?

\uXXXX 是 Unicode 字符在 ASCII 编码环境下的转义表示法(4 位十六进制数对应 UTF-16 码元)。许多早期的后端序列化库(如 Python json.dumps(ensure_ascii=True) 或老版本 PHP)为了保证生成的 JSON 文本在不支持 UTF-8 的网络信道中不会乱码,默认会将所有非 ASCII 字符转义为 \uXXXX。现代网络已全量普及 UTF-8 编码,通常只需设置对应参数(如 Python ensure_ascii=False)即可直接输出正常的中文字符。