【问题标题】:How to save all keys value into an array variable如何将所有键值保存到数组变量中
【发布时间】:2019-02-06 13:06:05
【问题描述】:

我有一个返回一些 json 结果的 cURL 命令。

我有:

{  
    "all":[  
        {
            "id":"1"
        },
        {
            "id":"2"
        },
        {
            "id":"3"
        }
    ]
} 

我的目标是将所有 ID 值检索到 Bash 中的数组中。我知道如何在知道位置的情况下检索特定的 ID。 这是我尝试过的:

#!/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"

这将按预期输出1,但我需要在不知道元素数量的情况下检索其他 ID。这可能吗?

是否可以检索数组中包含的值,例如:

{  
    "all":[  
        {
            "id":"1",
            "actions":[  
                "power",
                "reboot"
            ]
        },
        {
            "id":"2"
        },
        {
            "id":"3"
        }
    ]
} 

是否可以检索操作列表?

【问题讨论】:

  • 这和 Python 有什么关系?
  • 在命令行,你看问题了吗?

标签: python json bash shell curl


【解决方案1】:

您可以使用列表推导:

python -c "import sys, json; print [i['id'] for i in json.load(sys.stdin)['all']]"

【讨论】:

    【解决方案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"]
    

    【讨论】:

      猜你喜欢
      • 2010-10-09
      • 1970-01-01
      • 1970-01-01
      • 2018-11-29
      • 1970-01-01
      • 2019-11-29
      • 2018-08-15
      • 2017-12-01
      • 2014-02-14
      相关资源
      最近更新 更多