Linux 使用shell在json上迭代

Linux 使用shell在json上迭代,linux,bash,shell,ubuntu,jq,Linux,Bash,Shell,Ubuntu,Jq,我有一个json,格式如下。我想迭代这个json文件 { "atest_engine": { "version": "96" }, "a_kdfvm": { "version": "68" }, "aseft_api": { "version": "" }, "push_psservice": { "version": "68" }, } 我尝试了jq实用程序,我的脚本如下 count=$( jq '. | length' test.json

我有一个json,格式如下。我想迭代这个json文件

 {
     "atest_engine": { "version": "96" }, 
     "a_kdfvm": { "version": "68" }, 
     "aseft_api": { "version": "" },
     "push_psservice": { "version": "68" },
   }
我尝试了jq实用程序,我的脚本如下

count=$( jq '. | length' test.json )
echo $count
for((i=0;i<$count;i++)) 
do 
 name=$(cat test.json | jq '.|keys['${i}']')
 version=$(cat test.json | jq '.|keys['${i}'].version')
 echo $name
 echo $version
done
count=$(jq.| length'test.json)
echo$count

对于((i=0;i首先,您的JSON示例似乎有点格式错误-push_psservice行后面有一个逗号,但这很可能是一个输入错误

您可能会发现使用jq的to_条目将对象的字段转换为数组更容易(请参阅),例如:


试试这个。

首先,您的JSON示例似乎有点格式错误-push\u psservice行后面有一个逗号,但很可能是输入错误

您可能会发现使用jq的to_条目将对象的字段转换为数组更容易(请参阅),例如:

试试这个。

input.json 命令 结果 input.json 命令 结果
嗯,也许shell不是一个适合这个任务的工具?你考虑过python之类的替代工具吗?没有。我想使用shell脚本。我知道jq或类似的实用程序也可以。我只是面临编译错误。如果你坚持使用shell脚本,那么至少要学习shell脚本的基本知识。而且,shell脚本是否是一种反脚本tterns.嗯,也许shell不是完成这项任务的合适工具?你考虑过python之类的替代工具吗?没有。我想使用shell脚本。我知道使用jq或类似的实用程序是可能的。我只是面临编译错误。如果你坚持使用shell脚本,那么至少要学习shell脚本的基本知识。你是在编写shell脚本吗反模式。
to_entries | .[0].key
to_entries | .[0].value.version
{
     "atest_engine": { "version": "96" }, 
     "a_kdfvm": { "version": "68" }, 
     "aseft_api": { "version": "" },
     "push_psservice": { "version": "68" }
}
jq -r 'to_entries[] | "\(.key)\t\(.value.version)"' input.json |
  while read name version
  do
    echo "name:" $name
    echo "version:" $version
  done
name: atest_engine
version: 96
name: a_kdfvm
version: 68
name: aseft_api
version:
name: push_psservice
version: 68