使用 jq for JSON 为数组中的每个元素输出对象中的特定键值

Output specific key value in object for each element in array with jq for JSON

我有一个数组:

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

我想遍历这个数组中的每个对象,并挑选出每个名为 AssetId 的键的值并输出它。 我将如何在命令行中使用 jq 来执行此操作?

命令行工具 jq 写入 STDOUT and/or STDERR。如果要将.AssetId信息写入STDOUT,那么一种可能是:

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

输出:

14462955
114385498
29715011
98253651

一个更强大的咒语是:.[] | .AssetId? 但如果没有名为 "AssetId".

的密钥,您的选择将取决于您想要什么

您也可以通过此命令完成。

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

您有几个选择来执行循环本身。您可以应用 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

使用 map 的替代方法:

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