パイプを使わずに変数からjqを読み取る最も短い方法は何ですか?

パイプを使わずに変数からjqを読み取る最も短い方法は何ですか?

次のbashスクリプトがあるとしましょう。

json="$(curl -s "https://nominatim.openstreetmap.org/reverse.php?lat=-23.513442&lon=-46.384794&zoom=18&format=jsonv2")"
jq '.address.road' <(echo "$json")

デフォルトでは、Nominatim APIを使用して特定の場所の道路名を取得しています。結果は次のとおりです。

"Rua Linaria"

変数の値を使用するためにプロセス置換を使用しています<(echo "$json")。しかし、これが最も簡単なアプローチではないようです。パラメータを検索しようとしましたが、私に合ったパラメータが見つかりませんでした。擬似コードでは、次のようなものが必要です。$jsonjqman jq

jq --getvar "$json" '.address.road'

jqこれを行うことができるパラメータはありますか?それともファイルまたはパイプでのみ機能しますが、この場合はプロセスオーバーライドを使用するのが解決策ですか?

ベストアンサー1

それともファイルまたはパイプでのみ機能しますが、この場合はプロセスオーバーライドを使用するのが解決策ですか?

まあ、ファイルや標準入力で動作します。パイピングは標準入力を使用する方法であり、プロセス置換はファイルを使用する方法です。 heredocs または herestrings を標準入力として使用することもできます。

つまり、次のものを使用できます。--argjson:

% foo='{"a": "b"}'
% jq --argjson foo "$foo" -n '$foo.a'
b

したがって、あなたの場合は、次のようにすることができます。

json="$(curl -s "https://nominatim.openstreetmap.org/reverse.php?lat=-23.513442&lon=-46.384794&zoom=18&format=jsonv2")"
jq --argjson j "$json" -n '$j.address.road'

しかし個人的にはまっすぐこれを行う方法は、次にパイプすることcurlですjq

curl -s "https://nominatim.openstreetmap.org/reverse.php?lat=-23.513442&lon=-46.384794&zoom=18&format=jsonv2" |
  jq '.address.road'

おすすめ記事