JSON間の集合演算で面倒くさくなったのでpythonに丸投げした。できた。良かった。

github.com

集合演算を手軽にやりたかった。

以下のような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作ってよかったと思った。