如何将所有键值保存到数组变量中

时间:2019-02-06 13:06:06

标签: python json bash shell curl

我有一个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

是否可以检索动作列表?

2 个答案:

答案 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"]