Ответ 1
Лучше всего использовать JSON CLI, такой как jq
:
- В системах на основе Debian, таких как Ubuntu, вы можете установить его с помощью
sudo apt-get install jq
- В macOS с установленным Homebrew (http://brew.sh/) используйте
brew install jq
Примеры, основанные на следующей входной строке - вывод в stdout
:
jsonStr='{ "key1": "value1", "key2": "value2", "key3": "value3" }'
Удалить "ключ3":
jq 'del(.key3)' <<<"$jsonStr"
Добавьте свойство "key4" со значением "value4":
jq '. + { "key4": "value4" }' <<<"$jsonStr"
Измените значение существующего свойства "key1" на "new-value1":
jq '.key1 = "new-value1"' <<<"$jsonStr"
Спасибо, Ларс Кисов, за более надежную альтернативу:
Если вы передадите новое значение с помощью --arg
, jq
позаботится о правильном экранировании значения:
jq '.key1 = $newVal' --arg newVal '3 " of rain' <<<"$jsonStr"
Если вы хотите обновить JSON файл на месте (с концептуальной точки зрения), используя пример удаления "key3":
# Create test file.
echo '{ "key1": "value1", "key2": "value2", "key3": "value3" }' > test.json
# Remove "key3" and write results back to test.json (recreate it with result).
jq -c 'del(.key3)' test.json > tmp.$$.json && mv tmp.$$.json test.json
Вы не можете заменить входной файл напрямую, поэтому результат записывается во временный файл, который заменяет входной файл в случае успеха.
Обратите внимание на -c
, которая производит компактный, а не красиво напечатанный JSON.
Все параметры и команды см. В руководстве по адресу http://stedolan.github.io/jq/manual/.