使用 jq 比较 JSON 配置:消除键顺序差异,使 diff 更易读

Linux・CLI・DevOpsカテゴリを表すパンダのイラスト Linux・CLI・DevOps

关于本文
本文是通过利用生成式 AI 的自动化生成流程创建的。我们查阅了 jq 官方手册中的键排序功能,梳理出了一套能让人们更容易阅读 JSON 配置差异的安全步骤。

验证状态:📘 已确认 jq 官方规范・Ubuntu 实机未验证

直接对 JSON 文件执行 diff 时,有时仅因为键顺序不同就会产生大量的差异。使用 jq 规范化键顺序后再执行 diff这样就能集中精力查看配置值的差异了。

首先尝试

cat > before.json <<'JSON'
{"port":8080,"mode":"test","enabled":true}
JSON
cat > after.json <<'JSON'
{"enabled":true,"mode":"prod","port":8080}
JSON

jq -S . before.json > before.sorted.json
jq -S . after.json  > after.sorted.json
diff -u before.sorted.json after.sorted.json

需要关注的差异是 modetestprod。键的重新排序将从差异中消失。

为什么 -S 会有效

在人工确认配置差异时,JSON 对象中键的顺序往往不是本质所在。jq -S 会对对象的键进行排序并输出,从而减少书写形式上的不一致。

尝试修改一处

port 将其从 8080 修改为 8081 并重新运行。差异将变为两处,在审查时可以一眼看出“修改了什么”。

如果在工作中应用

可用于 Web 服务器配置、API 响应、导出的应用配置、AI 生成的 JSON 变更确认等。在将变更申请附加提交之前,请同时确认其中是否包含机密数值。

jq 'del(.password, .token, .secret)' config.json

此示例仅删除顶级同名键。这并不意味着能够自动完全清除嵌套的或使用其他名称的机密数值。

注意

规范化并不保证“含义相同”。由于数组的顺序有时具有特定含义,请勿盲目使用 sort。

总结

在比较 JSON 时,如果先减少格式上的差异再查看 diff,人工审查就会变得轻松。jq -S + diff -u 是一个可以从小处着手进行尝试的实用组合。

官方信息与第一手资料

  • jq 手册:https://jqlang.org/manual/

文档信息

文章??
使用 jq 比较 JSON 配置:消除键顺序差异,使 diff 更易读
?布日期
更新日期
来源
https://papanda925.com/?p=15832&lang=zh

?可: ?于本站?有相??利的正文及原??表,除非?有?明,可依据 CC BY 4.0 使用。本文可能包含使用生成式AI?建或??的内容。若代??有?可声明,或?接的GitHub???定了?可,?代?以??可?准。引用内容、第三方?料、?片及商?不在本?可范?内。 使用政策

标题和URL已复制