Json 在数组中循环时出现jq错误:无法使用字符串“为数组编制索引”&书信电报;键>&引用;
我正在尝试迭代Json 在数组中循环时出现jq错误:无法使用字符串“为数组编制索引”&书信电报;键>&引用;,json,linux,bash,shell,jq,Json,Linux,Bash,Shell,Jq,我正在尝试迭代all索引中包含的所有元素。这是我的json字符串: { "all":[ { "id":"51a" }, { "id":"52b" }, { "id":"53c" } ] } 我曾尝试使用jq进行迭代: for id in $(jq '.all.id | keys | .[]' <<<
all
索引中包含的所有元素。这是我的json字符串:
{
"all":[
{
"id":"51a"
},
{
"id":"52b"
},
{
"id":"53c"
}
]
}
我曾尝试使用jq
进行迭代:
for id in $(jq '.all.id | keys | .[]' <<< "$json"); do
echo "$id"
done
就像这样:
for id in $(jq -r '.all[].id' <<< "$json"); do
echo "$id"
done
整个脚本可能如下所示:
#!/usr/bin/env bash
json='{
"all":[
{
"id":"51a"
},
{
"id":"52b"
},
{
"id":"53c"
}
]
}'
for id in $(jq -r '.all[].id' <<< "$json"); do
echo "$id"
done
这里有一个基于用于JSON的步行路径unix工具的替代解决方案::
bash $ for id in $(jtc -qq -w'[all][:][id]' <<< "$json"); do echo "$id"; done
51a
52b
53c
bash $
bash$表示$中的id(jtc-qq-w'[all][:][id]“谢谢你的回答!我找到了一个解决方法,但我将使用回答中的代码。我想知道是否可以从同一数组中提取其他元素。假设我有id和名称索引及其值。如何提取两者?@executable:jq
是一个相当简单的工具。它定义了额外的表达式。”ct输入的一部分,以及用于组合输出的语法。.all[].id
是.all.[].id
的简写形式,您需要在.id
之外添加另一个成员。那么第二个成员应该如何与.id
组合?@可执行文件:它可以是这样的:表示$(jq-r.)中的id。all[].id+“”+.name'@Arkadiusz Drabczyk感谢您的回答,但是可以将它们分别分配给变量吗?与jq
有什么不同?工具截然不同。jq是一个拥有自己的DSL的处理器,其操作范围远远超出JSON数据模型。而jtc是一个仅限于数据模型操作的实用程序。这与erence让处理源JSON的查询变得容易多了(但当然是mho)。而IFS=read-rid;do…;done<
#!/usr/bin/env bash
json='{
"all":[
{
"id":"51a"
},
{
"id":"52b"
},
{
"id":"53c"
}
]
}'
for id in $(jq -r '.all[].id' <<< "$json"); do
echo "$id"
done
#!/usr/bin/env bash
json='{
"all":[
{
"id":"51a",
"name":"Steve"
},
{
"id":"52b",
"name":"Phoebe"
},
{
"id":"53c",
"name":"Dino"
}
]
}'
jq -r '.all[] | .id + " " + .name' <<< "$json" |
while read -r id name; do
echo id: "$id"
echo name: "$name"
done
bash $ for id in $(jtc -qq -w'[all][:][id]' <<< "$json"); do echo "$id"; done
51a
52b
53c
bash $