首页 > 工具箱 > JSON 结构处理

JSON 结构处理

不改数据内容,只动结构的那一类操作:拍平、换键名风格、排序、合并、去重、脱敏、抽字段。接口联调、配置迁移、日志分析时经常要来这么一下。全部在你的浏览器里算,粘进来的 JSON 不会发给服务器。

什么时候用得上

扁平化 / 还原
嵌套 JSON 拍成 a.b.c = 值 的一层结构。最常见的两个用途:往 Excel / CSV 里塞,以及和 Spring 的 application.properties 对照着看。还原是反向操作,把一层的点号路径重新拼回嵌套对象。
键名风格转换
后端返回 user_name、前端想要 userName,一层层手改很容易漏。注意:只改键名不改值,如果键名本身是业务数据(比如以用户 ID 当键),转换会破坏它。
按键名排序
两份 JSON 肉眼对不出差异时,先各自排序再 diff,噪音会少很多。JSON 对象在规范上是无序的,排序不改变语义。要直接看差异用 JSON 对比
深度合并
Object.assign 的浅合并不同,这里会递归进对象内部逐层合并;数组默认整体覆盖(这也是大部分配置系统的行为,比如 webpack、docker-compose 的 override)。
字段脱敏
要把线上报文贴到工单、issue 或者群里之前,先过一道。不带 * 的字段名是精确匹配(只忽略大小写和下划线),所以 access_token 这类要写成 *token* 才能命中——默认那几条已经这么写了。脱敏在你本机完成,但贴出去之前还是自己再扫一眼,别漏了藏在 extra 里的东西。
按路径取值改值
路径支持 a.b[0].c/a/b/0(JSON Pointer)和 $.a.b 三种写法。改值时路径中间缺的层会自动补出来,下一段是数字就补成数组。要批量按表达式取值用 JSONPath 测试,要生成标准补丁用 JSON Patch
数值与文本互转
专治「雪花 ID 传到前端末尾变成 0」。JavaScript 的数字是双精度浮点,安全整数上限是 9007199254740991(16 位),订单号、消息 ID 这类 18、19 位的整数一进 JS 就已经变了值。注意本页也是在浏览器里解析的,超限的数字在 JSON.parse 那一刻就已经失真,转成字符串只能保住「现在这个值」——真正的解法是让服务端直接把这些字段输出成字符串。
键名 / 键值提取
拿到一份陌生接口的响应,先把所有叶子路径列出来,比对着嵌套 JSON 一层层翻快得多。结果可以直接喂给 JSONPath 测试
已复制