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 测试。