我是jq的新手。我的业务问题如下:我有几个GPS位置地址存储在几个JSON中。 JSON格式如下:
{
"Data": [{
"Date": "2018-06-19T06:02:12+02:00",
"Latitude": 46.54225,
"Longitude": 17.13874,
"Type": "GPS",
"Speed(mph)": 0,
"Speed(km/h)": 0,
"Direction": null,
"Altitude(ft)": 406,
"Altitude(m)": 124,
"Accuracy": 50
},
{
"Date": "2018-06-19T06:59:49+02:00",
"Latitude": 46.53973,
"Longitude": 17.06964,
"Type": "GPS",
"Speed(mph)": 1,
"Speed(km/h)": 2,
"Direction": 208,
"Altitude(ft)": 377,
"Altitude(m)": 115,
"Accuracy": 10
}]
}
我想在纬度和经度值上循环,将它们逐个存储在两个变量中,对于这些变量,我想用shell脚本调用Google的反向地理编码rest API - 对: https://maps.googleapis.com/maps/api/geocode/json?latlng=[VARIABLE1],[VARIABLE2]&key=APIKEYHERE
在另一个Stackoverflow问题中,有一个类似的问题。感谢这个问题,我试过这样的事情,但显然变量不能正常工作:
"error_message" : "Invalid request. Invalid 'latlng' parameter.",
"results" : [],
"status" : "INVALID_REQUEST"
代码:
jq -rc '.Latitude + " " +.Longitude' /usr/location/archive/location_1806181400.json |
while read -r Latitude Longitude; do
curl https://maps.googleapis.com/maps/api/geocode/json?latlng=$Latitude,$Longitude&key=APIKEYHERE
done
答案 0 :(得分:0)
你可以尝试:
jq -r '.Data[] | "\(.Latitude) \(.Longitude)"' /usr/location/archive/location_1806181400.json | while read l g; do
curl "https://maps.googleapis.com/maps/api/geocode/json?latlng=${l},${g}&key=APIKEYHERE";
done
与您的几乎相同,但jq
脚本和curl
命令的引用除外。
答案 1 :(得分:0)
问题在于您的jq
过滤器,您需要执行如下的插值逻辑,以CSV格式输出值,您可以使用shell循环解析它。
jq -r '(.Data[] | "\(.Latitude),\(.Longitude)")'
现在把它放在循环中
jq -r '(.Data[] | "\(.Latitude),\(.Longitude)")' /usr/location/archive/location_1806181400.json |
while IFS=, read -r lat long; do
curl "https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${long}&key=APIKEYHERE"
done