Два select() в jq, похоже, сбрасывают текущий указатель

С JSON:

[
    {
        "key": "1",
        "value": "one"
    },
    {
        "key": "2",
        "value": "two"
    }
]

И jq:

.[]|{ one: select(.key=="1").value }

Я получаю ожидаемый результат:

{
  "one": "one"
}

Если я добавлю второй атрибут, он окажется пустым:

.[]|{ one: select(.key=="1").value, two: select(.key=="2").value }

Если я сделаю атрибут two просто ., он покажет, что . стал узлом, выбранным select():

.[]|{ one: (select(.key=="1").value), two: . }

Производит:

{
  "one": "one",
  "two": {
    "key": "1",
    "value": "one"
  }
}

Как использовать select() так, чтобы это не повлияло на .? Или, лучше сказать, как правильно выполнить то, что я ищу:

{
  "one": "one",
  "two": "two"
}
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
1
0
50
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Решение:

.|{ one: (.[]|select(.key=="1").value), two: (.[]|select(.key=="2").value) }

Массив нужно было отправить как один поток. Использование .[]| вызвало два отдельных потока, по одному для каждого элемента массива.

Это ясно, если сделать:

.[]|{ single: .key }

Что произвело:

{
  "single": "1"
}
{
  "single": "2"
}

Поскольку у каждого отдельного потока не было критериев для соответствия обоим атрибутам (key=="1" и key=="2"), каждый из них был исключен из каждого потока. Отправка массива целиком (.|), а не отдельных элементов (.[]|), позволила обоим select() вести себя так, как предполагалось.

Попробуй это :

jq 'from_entries as $mapping |
    {one:"1", two:"2"}       |
    map_values($mapping[.])' input.json

Таким образом, вы можете легко добавлять three, four,...

Ответ принят как подходящий

Правильный способ в этом случае:

from_entries | {one: ."1", two: ."2"}

Online demo

Другие вопросы по теме