Как фильтровать по значению в JSON с помощью JQ - PullRequest
0 голосов
/ 19 октября 2018
{    "amazon": {

                "items": [
                  {
                    "name": "harry potter",
                    "state": "sold"
                  },
                  {
                    "name": "adidas shoes",
                    "state": "in inventory"
                  },
                  {
                    "name": "watch",
                    "state": "returned"
                  },
                 ]
    }

}

Я хочу написать инструмент разбора jq json, чтобы изменить "имя: Гарри Поттер" из состояния "продано" в "возвращено"

Я хочу изменить это в сценарии оболочки (.sh)файл.

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Другой jq фильтр с использованием функции select:

jq '.amazon.items |= map(select(.name=="harry potter").state="returned")' file
0 голосов
/ 19 октября 2018

Предполагая, что ввод является допустимым JSON, следующий фильтр выполнит редактирование условно, как указано:

.amazon.items
|= map(if .name == "harry potter" and .state == "sold"
       then .state = "returned" else . end)

Или, скорее, вызов jq с этим фильтром выдаст обновленный JSON.

Возможно, вы захотите использовать sponge для перезаписи исходного файла, если вы уверены, что это действительно то, что вы хотите сделать.

...