首页 > 解决方案 > 从 JSON 中解析变量,然后使用 curl 的变量在几个 url 上循环

问题描述

我是 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 的反向地理编码休息 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

标签: jsonshelljq

解决方案


你可以试试:

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


推荐阅读