我有一个cURL命令,它返回一些json结果。
我有:
var data = {"keywords":"key, pase","fps":0,"productionYear":1920,"contentType":2,"country":"US", "tags":["trap","bad","day","anderson"],"related":[], "series": ""};
function cleanData(data) {
for(let key in data) {
if(typeof data[key] == 'string') {
if(data[key] == null || data[key] == "" || data[key] == undefined) {
delete data[key];
}
} else if(typeof data[key] == 'object') {
if(data[key].length == 0) {
delete data[key];
}
}
}
return data;
}
console.log(cleanData(data));
我的目标是将所有ID值检索到Bash中的数组中。我知道如何知道该位置来检索特定的ID。 这是我尝试过的:
{
"all":[
{
"id":"1"
},
{
"id":"2"
},
{
"id":"3"
}
]
}
这将按预期输出#!/bin/bash
CURL_COMM=$(curl https://DOMAIN/API -H "X-Auth-Token: TOKEN" | python -c "import sys, json; print json.load(sys.stdin)['all'][0]['id']")
echo "$CURL_COMM"
,但是我需要获取其他ID而不知道元素的数量。有可能吗?
并且可以检索数组中包含的值,例如:
1
是否可以检索动作列表?
答案 0 :(得分:2)
您可以使用列表理解:
python -c "import sys, json; print [i['id'] for i in json.load(sys.stdin)['all']]"
答案 1 :(得分:2)
与往常一样,jq使从命令行轻松使用JSON。
第一个作为包含JSON数组的字符串:
$ CURL_COMM=$(curl blah | jq -c '[ .all[].id | tonumber ]')
$ echo $CURL_COMM
[1,2,3]
第一个bash数组:
$ CURL_COMM=($(curl blah | jq '.all[].id | tonumber'))
$ echo ${CURL_COMM[1]}
2
第二个:
$ jq -c '.all[0].actions' example.json
["power","reboot"]