我正在为应用程序/ json响应卷曲Web API,该响应是一组键值对,如下所示:
{"id":89,"name":"User saved 2018-07-03 12:01:47.337483","create_time":1530644507337,"auto":false,"recovered":false}
{"id":49,"name":"User saved 2018-05-24 12:33:53.927798","create_time":1527190433927,"auto":false,"recovered":false}
{"id":199,"name":"Daily backup 2018-10-22 02:37:37.332271","create_time":1540201057332,"auto":true,"recovered":false}
等,等等...
我想遍历此响应并找到“ id”键的最大值整数,然后将其另存为变量。如果以上是我的整个JSON,我将最终以variable = 199结束。
做这样的事情:
MY_VARIABLE=$(curl -k -X GET --header "Accept: application/json" \
--header "Authorization: MyAPITarget apikey=${MY_APIKEY}" \
"https://targetserver/api/methodImCalling" |
其输出是上面的JSON。我可以将输出通过管道传递给数组并对其进行迭代,但只查找“ id”的值,然后执行类似于a的操作:
for (i = 0; i < id.length; i++)
我只用了短时间的代码,这时我的大部分背景是JS,试图在这里建立bash的连接。我试图避免使用任何“已安装”工具,这就是为什么我使用bash的原因,我希望此脚本可以在任何linux / unix平台上“开箱即用”运行。有小费吗?谢谢!
答案 0 :(得分:1)
这可能是一个单独的安装,但是您想要的工具是jq
:
max_id=$(curl ... | jq -s 'map(.id) | max')
人们可以期望预装的标准工具根本不适合使用JSON。
虽然不是标准的,但是任何安装了curl
的计算机都可能安装了Python,并且您可以使用其标准的json
模块来正确处理JSON。这是一个有点笨拙的单线:
curl ... |
python -c 'import json,sys; x="[%s]"%(",".join(sys.stdin),); print(max(y["id"] for y in json.loads(x)))'
其他非标准但通用的语言(Perl,Ruby等)可能也具有使用JSON的内置方法。