使用 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 ) | .[]"
我有一个数组:
[
{
"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 ) | .[]"