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")
來使用$json
變數的值jq
…但是,我覺得這不是最直接的方法。我已經嘗試在 on 上搜尋一個參數,man jq
但我沒有找到對我有用的東西。在虛擬碼中,我想要類似的東西:jq --getvar "$json" '.address.road'
是否有任何
jq
參數可以讓我這樣做?還是它僅適用於文件或管道,並且在這種情況下使用程序替換是解決方法?
還是它僅適用於文件或管道,並且在這種情況下使用程序替換是解決方法?
好吧,它適用於文件或標準輸入;管道是一種使用標準輸入的方式,程序替換是一種使用文件的方式。您也可以將 heredocs 或 herestrings 用於標準輸入。
也就是說,您可以使用
--argjson
:% foo='{"a": "b"}' % jq --argjson foo "$foo" '$foo.a' -n 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'