Я хотел бы печатать каждый путь и значение файла json с включенными значениями ключа построчно. Мне бы хотелось, чтобы выходные данные были разделены запятыми или, по крайней мере, их было легко вырезать и сортировать с помощью инструментов командной строки Linux. Учитывая следующие json и jq , мне дали jq код, который, кажется, делает это для теста JSON, но я не уверен это работает во всех случаях или является правильным подходом.
Есть ли в jq функция, которая делает это автоматически? Если нет, то есть ли «самый лаконичный лучший способ» сделать это?
Мой wi sh будет выглядеть примерно так:
$ 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
Test 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"