【发布时间】:2020-01-12 01:53:09
【问题描述】:
我想逐行打印包含键值的json 文件的每个路径和值。我希望输出用逗号分隔,或者至少很容易使用 Linux 命令行工具进行剪切和排序。鉴于以下json 和jq,我得到了jq 代码,它似乎对测试JSON 执行此操作,但我不确定它是否适用于所有情况或者是否是正确的方法。
jq 中是否有自动执行此操作的函数?如果没有,是否有“最简洁的最佳方式”?
我的愿望是这样的:
$ cat short.json | jq -doit '.'
Reservations,0,Instances,0,ImageId,ami-a
Reservations,0,Instances,0,InstanceId,i-a
Reservations,0,Instances,0,InstanceType,t2.micro
Reservations,0,Instances,0,KeyName,ubuntu
测试 JSON:
$ cat short.json | jq '.'
{
"Reservations": [
{
"Groups": [],
"Instances": [
{
"ImageId": "ami-a",
"InstanceId": "i-a",
"InstanceType": "t2.micro",
"KeyName": "ubuntu"
}
]
}
]
}
推荐代码:
https://unix.stackexchange.com/questions/561460/how-to-print-path-and-key-values-of-json-file
支持:
https://unix.stackexchange.com/questions/515573/convert-json-file-to-a-key-path-with-the-resulting-value-at-the-end-of-each-k
JQ代码太长太复杂了!
jq -r '
paths(scalars) as $p
| [ ( [ $p[] | tostring ] | join(".") )
, ( getpath($p) | tojson )
]
| join(": ")
' short.json
Result:
Reservations.0.Instances.0.ImageId: "ami-a"
Reservations.0.Instances.0.InstanceId: "i-a"
Reservations.0.Instances.0.InstanceType: "t2.micro"
Reservations.0.Instances.0.KeyName: "ubuntu"
【问题讨论】:
标签: json json jq jq jq json path jq