【问题标题】:Output specific key value in object for each element in array with jq for JSON使用 JSON 的 jq 为数组中的每个元素输出对象中的特定键值
【发布时间】:2016-06-11 04:18:04
【问题描述】:

我有一个数组:

[
    {
        "AssetId": 14462955,
        "Name": "Cultural Item"
    },
    {
        "AssetId": 114385498,
        "Name": "Redspybot"
    },
    {
        "AssetId": 29715011,
        "Name": "American Cowboy"
    },
    {
        "AssetId": 98253651,
        "Name": "Mahem"
    }
]

我想循环遍历这个数组中的每个对象,并挑选出每个名为AssetId 的键的值并将其输出。 我将如何在命令行中使用 jq 来做到这一点?

【问题讨论】:

  • 请说清楚是[jq]问题还是[jquery]问题。它们相同,不应一起使用...您的问题在您如何标记和询问方面完全模棱两可。

标签: iteration jq


【解决方案1】:

你也可以通过这个命令来做。

jq ".[].AssetId" input.json

如果数组像我的情况一样

{  
   "resultCode":0,
   "resultMsg":"SUCCESS",
   "uniqueRefNo":"111222333",
   "list":[  
      {  
         "cardType":"CREDIT CARD",
         "isBusinessCard":"N",
         "memberName":"Bank A",
         "memberNo":10,
         "prefixNo":404591
      },
      {  
         "cardType":"DEBIT CARD",
         "isBusinessCard":"N",
         "memberName":"Bank A",
         "memberNo":10,
         "prefixNo":407814
      },
      {  
         "cardType":"CREDIT CARD",
         "isBusinessCard":"N",
         "memberName":"Bank A",
         "memberNo":10,
         "prefixNo":413226
      }
   ]
}

您可以使用下面的 jq 命令获取 prefixNo。

jq ".list[].prefixNo" input.json

有关在 jq 上进行数组迭代的更具体情况,您可以查看this blogpost

【讨论】:

    【解决方案2】:

    使用map的替代方法:

    jq "map ( .AssetId ) | .[]"
    

    【讨论】:

      【解决方案3】:

      你有几个选择来做循环本身。您可以应用 peak 的出色答案并在其周围包裹一个 shell 循环。将 echo 替换为您要运行的脚本。

      通过 xargs

      $ jq -r ".[] | .AssetId" input.json | xargs -n1 echo  # this would print
      14462955
      114385498
      29715011
      98253651
      

      通过原始循环

      $ for i in $(jq -r ".[] | .AssetId" input.json)
        do
          echo $i
        done
      14462955
      114385498
      29715011
      98253651
      

      【讨论】:

        【解决方案4】:

        命令行工具jq 写入STDOUT 和/或STDERR。如果要将 .AssetId 信息写入 STDOUT,则一种可能性如下:

        jq -r ".[] | .AssetId" input.json
        

        输出:

        14462955
        114385498
        29715011
        98253651
        

        更强大的咒语是:.[] | .AssetId?,但如果没有名为“AssetId”的键,您的选择将取决于您想要什么。

        【讨论】:

        • 谢谢,非常有帮助的回答!
        • 注意:我如何将每一个发送到一个函数中?
        • 尝试了这个之后,我发现了一个错误。它说意外的字符串。
        • @ZimbabweElephant - 请参阅更新。如果您仍有问题,请更具体一些和/或酌情创建一个新的 SO Q。
        • @ZimbabweElephant - 不确定您指的是什么“功能”。一个你自己在 jq 中创建的?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-09-26
        • 1970-01-01
        • 2017-04-27
        • 2020-03-18
        • 1970-01-01
        • 2020-05-09
        • 1970-01-01
        相关资源
        最近更新 更多