Назад | Перейти на главную страницу

Манипулировать JSON в bash

У меня есть файл JSON, в котором мне нужно обновить определенное значение.

{
  "Comment": "comment",
  "test": {
    "enabled": true
  },
  "enabled": true,
  "otherStuff": blah,
  "otherStuff2": blah,
  "otherStuff3": blah,
}

Я бы хотел изменить значение второго «включено» на false. С помощью JQ Parser я могу легко получить его с помощью jq '.enabled', но я не уверен, как лучше всего манипулировать JSON.

JSON - это ответ, который я получаю от API, и он может измениться в будущем, я не могу полагаться на строку или значение до / после.

быстрый эксперимент:

$ 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, вы можете (адаптировано из Брендан ОКоннор):

curl <destination> | grep -Po '"keyname":.*?[^\\]",'`