2023年12月22日金曜日

Python から jq を使う方法

Python から jq を使う方法

概要

コマンドラインからではなく Python プログラム内で jq を使う方法を紹介します

環境

  • macOS 14.2
  • Python 3.11.6
  • jq.py 1.6.0

サンプルコード

import jq

# キーを指定して値を参照
a = {"name": "hawk", "age": 10}
print(jq.compile(".name").input_value(a).first())

# 配列をループして順番に参照
a = {"langs": ["ruby", "python", "javascript", "swift"]}
for lang in jq.compile(".langs[]").input_value(a):
    print(lang)

# 配列の長さを取得
a = {"langs": ["ruby", "python", "javascript", "swift", "elisp"]}
print(len(jq.compile(".langs[]").input_value(a).all()))

# all や first は参照した値の型を適切に返すが text は文字列として返す
print(type(jq.compile(".langs[]").input_value(a).all()))
print(type(jq.compile(".langs").input_value(a).text()))

上記をコマンドでやった場合

echo '{"name": "hawk", "age": 10}' | jq .name

echo '{"langs": ["ruby", "python", "javascript", "swift"]}' | jq '.langs[]'

echo '{"langs": ["ruby", "python", "javascript", "swift", "elisp"]}' | jq '.langs | length'

最後に

JSON のパースだけであれば Python デフォルトの json モジュールを使ってもできますが dict を直接扱うのが嫌な場合や複雑な場合には jq.py を使うことできれいに書けることがあるかもしれません

参考サイト

0 件のコメント:

コメントを投稿