Модификация вложенного объекта с помощью jq - PullRequest
0 голосов
/ 10 ноября 2019

Я использую jq для изменения файла json, но у меня проблемы с вложенными объектами. Мне нужно найти объект внутри массива объектов, а затем изменить вложенный объект внутри этого объекта. Я могу найти правильный объект и изменить пару ключ / значение внутри этого объекта, но изменение пары ключ / значение внутри вложенного объекта вызывает у меня проблемы. Я уверен, что есть способ сделать это с помощью jq, но я не могу его найти. В этом примере я пытаюсь изменить значение pos_color для дорожки с меткой AX11S1.bw.

# find correct object and change key/value command ( this will change the min_score from 0 to 200 )
jq '.tracks |= map(if .label=="AX11S1.bw" then . + {"min_score":"200"} else . end)' trackList.json 

# Example JSON
{
  "tracks": [
    {
      "style": {
        "clip_marker_color": "red",
        "neg_color": "#005EFF",
        "pos_color": "blue",
        "height": 100
      },
      "variance_band": true,
      "max_score": 100,
      "label": "AX11S1.bw",
      "min_score": 0
    },
    {
      "style": {
        "clip_marker_color": "red",
        "neg_color": "#005EFF",
        "pos_color": "blue",
        "height": 100
      },
      "variance_band": true,
      "max_score": 100,
      "label": "AX11S2.bw",
      "min_score": 0
    },
    {
      "style": {
        "clip_marker_color": "red",
        "neg_color": "#005EFF",
        "pos_color": "blue",
        "height": 100
      },
      "variance_band": true,
      "max_score": 100,
      "label": "AX11S3.bw",
      "min_score": 0
    }
  ]
}

1 Ответ

1 голос
/ 10 ноября 2019
.tracks |= map(if .label=="AX11S1.bw" 
               then .style.pos_color = "NEW VALUE" 
               else . end)
...