JSON間の集合演算で面倒くさくなったのでpythonに丸投げした。できた。良かった。
集合演算を手軽にやりたかった。
以下のようなxs.jsonとys.jsonに対する集合演算をやってみたい。
$ echo '[1,2,3,4,5]' > xs.json $ echo '[2,4,6,8,10]' > ys.json
意外とコマンドライン引数に渡して、それに --slurp
をつけてリストとして扱うというのが便利。
$ jqfpy --slurp 'L = get(); do_something(L[0], L[1])' <file1> <file2>
これはgetでも大丈夫。
$ jqfpy --slurp 'do_something(get("0"), get("1"))' <file1> <file2>
やってみた結果
intercection
# x * y $ jqfpy --slurp 'list(set(get("0")).intersection(get("1")))' xs.json ys.json [ 2, 4 ]
union
# x + y jqfpy --slurp 'list(set(get("0")).union(get("1")))' xs.json ys.json [ 1, 2, 3, 4, 5, 6, 8, 10 ]
difference
# x - y jqfpy --slurp 'list(set(get("0")).difference(get("1")))' xs.json ys.json [ 1, 3, 5 ] # y - x jqfpy --slurp 'list(set(get("0")).difference(get("1")))' ys.json xs.json [ 6, 8, 10 ]
jqでは
たぶんjqでも出来るでしょと思って調べたら結構辛そうだった。pythonに丸投げできてjqfpy作ってよかったと思った。