Манипулировать 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":.*?[^\\]",'`
Другие вопросы по тегам