Выходной ключ со значением

#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
}