次の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")
。しかし、これが最も簡単なアプローチではないようです。パラメータを検索しようとしましたが、私に合ったパラメータが見つかりませんでした。擬似コードでは、次のようなものが必要です。$json
jq
man 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'