Мне нужно манипулировать объектами в массиве, где единственный ключ этих объектов не является фиксированной, общей строкой.Вот очень быстрый пример:
echo '{ "a": { "b" : 1 } }'|jq '. as $save|keys'
Итак, проблема в том, что «а» может быть чем угодно.Итак, я не могу использовать jq '.a'.Единственный способ узнать имя ключа - использовать встроенную функцию keys .Однако, похоже, что ключи не хотят играть вместе с запятой (выдает синтаксическую ошибку, например:)
echo '{ "a": { "b" : 1 } }'|jq 'keys, . as $save|$save[.]'
, и если вы измените их как единственный этап конвейера, вы получите еще одну ошибку:
echo '{ "a": { "b" : 1 } }'|jq '. as $save, keys'
jq: error: syntax error, unexpected ',', expecting
'|' (Unix shell quoting issues?) at <top-level>,
line 1: . as $save, keys
jq: 1 compile error
Кажется, что ключи ожидают быть единственным оператором на входе и единственным источником вывода.
Есть ли другой способ найти"a"?
Если я привел слишком упрощенный пример, который я привел, и вы не поняли проблему, тогда, пожалуйста, рассмотрите подмножество данных, которыми мне действительно нужно манипулировать:
{
"rows": [
{
"i-0cf0": {
"chef_environment": "alpha-prod",
"ec2.placement_availability_zone": "us-east-1d"
}
},
{
"i-f9aa": {
"chef_environment": "alpha-qa",
"ec2.placement_availability_zone": "us-east-1b"
}
}
]
}
Комментарии побудили меня добавить этот дополнительный контент.Пример дополнительных манипуляций, которые я хочу сделать для вышеуказанного ввода: выбор на основе определенных значений chef_environment и для них, вывод ключа и зоны доступности, например,
i-f9aa,us-east-1b