jqでJSONのrecordもfieldもsortする
やりたいこと
record の順番も field の順番もバラバラな JSON があるんだけど、この JSON 同士を比較してどこに差があるのかを知りたい。
方法
毎度おなじみ jq を使う。
- –sort-keys オプションを使うと field の方を sort できる
- 'sort()' あるいは 'sort_by()' という function で record を sort できる
取れました。jq 'sort_by(.<col>) --sort-keys で出力した結果同士を比較するとだいたい目的を達成できました。「だいたい」なのがなぜかよく分からんですが。
— wtnabe (@wtnabe) February 26, 2020
ということでまとめると
jq --sort_by('.<key>') --sort-keys <file>
と叩くと JSON の record と field 両方が sort できるので、sort 済みの JSON 同士を比較すれば human readable な diff を生成できるようになります。