JSON用のXMLstarlet?

JSON用のXMLstarlet?

同様のツールがありますか?XMLスターしかし、XMLの代わりにJSONの場合?

マイユースケース:一部のREST APIから返される階層JSONドキュメントから特定の値を抽出します。

XPathのような表現でノードのようなものを選択できると便利です。

ベストアンサー1

jqは豊富な表現言語を提供しますJSONドキュメントから要素を選択するために使用されます。

selしたがって、XPath式を使用するコマンドと似ています。xmlstartlet

たとえば、Digital Oceanで使用可能なCentOS 7カーネルバージョンのリストをレコード様式に抽出するには、次の手順を実行します。

$ jq '[ .kernels[] | select(.name | test("^CentOS 7 x64")) | del(.name)
        | "\(.version) \(.id)"] | .[]' kernels.json

または、次のように単純化しました。

jq '.kernels[] | select(.name | test("^CentOS 7 x64")) |
     "\(.version) \(.id)" ' kernels.json

jsonは次のように取得できます。

$ curl -o kernels.json -X GET -H "Content-Type: application/json" \
    -H "Authorization: Bearer $bearer" \
 "https://api.digitalocean.com/v2/droplets/$droplet/kernels?page=1&per_page=1000"

しかもオブジェクトパス、他のJSONクエリ言語 - jqはより広く利用可能であるようですが(例えばFedora 23にパッケージされています)

複数のバインディングを持つjqなどのプログラムでこれらのクエリフラグメントを再利用するのは簡単です(例:Pythonの場合)とObjectPathはPythonモジュールとしても利用できます。

おすすめ記事