Прошу прощения, если я пропустил что-то очень очевидное; Я только что нашел jq
и пытаюсь использовать его для обновления одного значения JSON, не затрагивая окружающие данные.
Я хотел бы передать curl
результат jq
, обновить значение и передать обновленный JSON в файл curl -X PUT
. Что-то вроде
curl http://example.com/shipping.json | jq '.' field: value | curl -X PUT http://example.com/shipping.json
До сих пор я хакнул его вместе с помощью sed
, но, посмотрев несколько примеров |=
оператора в, jq
я уверен, что они мне не нужны.
Вот образец JSON - как мне jq
установить "local": false
, сохранив остальную часть JSON?
{
"shipping": {
"local": true,
"us": true,
"us_rate": {
"amount": "0.00",
"currency": "USD",
"symbol": "$"
}
}
}
"
его, например.shipping.local = "new place"
. Так что вся команда будетcurl http://example.com/shipping.json | jq '.shipping.local = "new place"'
. В противном случае вы получите странные ошибки.false
. Значения не обязательно должны быть строками.false
. В чем дело?Обновите значение (устанавливает .foo.bar на «новое значение»):
Обновите значение с помощью переменной (устанавливает .foo.bar на "hello"):
источник
функция, аналогичная оператору | =, - это map. map будет подходящим, чтобы избежать требования предыдущего фильтра для массива ...
представьте, что ваши данные представляют собой массив (очень часто в этом примере)
следовательно, необходимо рассматривать массив в коде как:
или использовать функцию карты, созданную для работы с каждым элементом массива как
Наблюдение
Ради тех, кто учится, вы также допустили некоторые ошибки при использовании jq, просто учтите, что он "читает" 1-й параметр как программу, поэтому все желаемые команды должны быть включены в самую первую строку после вызова программа.
источник