Jq заменить слово в json - PullRequest
       63

Jq заменить слово в json

0 голосов
/ 28 января 2020

У меня есть json ниже, и мне нужно получить значение ключа "toModify" в разделе данных. А также хотел изменить значение ключа (toModify) с другим значением, например: hello1234567 для xyz. Как мы можем сделать это, используя JQ.

{
  "items": [
    {
      "source": {
        "id": "12334"        
      },
      "data": {
        "name": "test",
        "value": "test",        
        "cData": [
          {
            "key": "keOne",
            "value": "hello"
          },
          {
            "key": "toModify",
            "value": "hello1234567"
          }
        ]
      } 
    }
  ]
}

Ответы [ 2 ]

0 голосов
/ 29 января 2020

Требования немного схематичны, но следующее дает желаемый результат в данном конкретном случае и иллюстрирует один подход:

.items[].data.cData
  |= map(if .key == "toModify" then .key = "MODIFIED" else . end)
0 голосов
/ 28 января 2020

Ваш ввод, в частности значение клавиши cData, выглядит специально для использования с to_entries и from_entries.

$ jq '.items[0].data.cData |= (from_entries | .toModify = "xyz" | to_entries)' tmp.json
{
  "items": [
    {
      "source": {
        "id": "12334"
      },
      "data": {
        "name": "test",
        "value": "test",
        "cData": [
          {
            "key": "keOne",
            "value": "hello"
          },
          {
            "key": "toModify",
            "value": "xyz"
          }
        ]
      }
    }
  ]
}
...