Манипулировать JSON в Bash
У меня есть файл JSON, мне нужно обновить определенное значение.
{
"Comment": "comment",
"test": {
"enabled": true
},
"enabled": true,
"otherStuff": blah,
"otherStuff2": blah,
"otherStuff3": blah,
}
Я хотел бы изменить значение второго "включен" на false. С помощью JQ Parser я могу легко получить его с помощью jq '.enabled', но я не уверен, как лучше всего манипулировать JSON.
JSON - это ответ, который я получаю от API, и может измениться в будущем, я не могу полагаться на строку или значение до / после.
2 ответа
Решение
Быстрый эксперимент:
$ echo '{
"Comment": "comment",
"test": {
"enabled": true
},
"enabled": true,
"otherStuff": "blah",
"otherStuff2": "blah",
"otherStuff3": "blah"
}' |
jq '.enabled=false'
{
"otherStuff3": "blah",
"otherStuff2": "blah",
"otherStuff": "blah",
"enabled": false,
"test": {
"enabled": true
},
"Comment": "comment"
}
Я прочитал вопрос как "в оболочке" и не обязательно как "используя только встроенные команды bash".
Попробуйте jsawk, который допускает манипулирование и является сценарием, хотя он полагается на js как зависимость.
Если все, что вы хотите сделать, это прочитать (уникальный) ключ из ответа JSON, вы можете (адаптировано из Brendan OConnor):
curl <destination> | grep -Po '"keyname":.*?[^\\]",'`