#json #bash #jq
#json #bash #jq
Вопрос:
Задан объект json (сохраненный как переменная bash $test)
{
"foo": {
"name": "my foo"
},
"bar": {
"name": "my bar"
}
}
Если я хочу вывести
{
"foo": {
"name": "my foo"
}
}
Похоже, я должен использовать
$ jq '. | with_entries(select(.key == "foo"))' <<<$test
{
"foo": {
"name": "my foo"
}
}
Есть ли более простой метод для достижения того же результата?
Комментарии:
1. У вас действительно должны быть двойные кавычки вокруг переменной interpolation
<<<"$test"
2. Кавычки не являются строго необходимыми в последних версиях
bash
; до версии 4.4 существовали различные ошибки, которые требовали кавычек в качестве обходного пути.
Ответ №1:
Да!
jq '{foo}'
Объяснение
{foo}
является сокращением для {"foo": .foo}
🙂
Предостережение
Сокращенная форма может использоваться только для имен ключей, которые не являются ключевыми словами if
jq (такими как,,,). Однако:
$ jq -n '{"if"}'
{
"if": null
}