我想列出给定json中的所有ID和角色,但其中只有一个角色,而不是1的数组,它提供了它作为对象,因此如果我运行“ []?”我收到错误“无法为字符串“名称”索引字符串”。
提取(example.json):
{
"Person": [
{
"Roles": {
"Role": {
"@Id": "1",
"Name": "Job1"
}
}
},
{
"Roles": {
"Role": [
{
"@Id": "2",
"Name": "Job2"
},
{
"@Id": "3",
"Name": "Job3"
}
]
}
}
]
}
我希望这可能起作用:
jq -r . | '.Roles.Role[]?>.@Id + "," + .Roles.Role[]?>.Name'
这是我想要的输出(以便可以通过管道传输到csv)
1,Job1
2,Job2
3,Job3
答案 0 :(得分:0)
以下将产生如下所示的CSV。调整程序以删除双引号等很容易。
.Person[]
| .Roles.Role
| if type == "array" then .[] else . end
| [.["@Id"], .Name]
| @csv
"1","Job1"
"2","Job2"
"3","Job3"
.Person
| range(0; length) as $ix
| .[$ix]
| .Roles.Role
| if type == "array" then .[] else . end
| [$ix, .["@Id"], .Name]
| @csv
答案 1 :(得分:0)
或者,您可以使用path-based
Unix实用程序 jtc
来达到相同的效果,这里是jtc
的样子:
bash $ <example.json jtc -w'[@Id]:<id>P:[-1][Name]' -T'"{id},{}"' -qq
1,Job1
2,Job2
3,Job3
bash $
PS>披露:我是jtc
-用于JSON操作的shell cli工具的创建者