假设我有以下 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'