Изменить ключи в нескольких вложенных объектах / массивах - PullRequest
0 голосов
/ 01 октября 2018

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

{
  "a": {
    "b": {
      "c": [
        {
          "0": {
            "x": 23,
            "name": "AS"
          }
        },
        {
          "1": {
            "x": 23,
            "name": "AS"
          }
        },
        {
          "2": {
            "x": 23,
            "name": "Fe"
          }
        },
        {
          "3": {
            "x": 23,
            "name": "Pl"
          }
        }
      ]
    }
  }
}

Я пробовал несколько подходов, но не могу изменить значение x иполучить полный JSON в результате.Все, что мне удалось сделать, это изменить значение x и получить в результате последний массив.

Вот самое близкое, что мне удалось достичь: https://jqplay.org/s/Wx741btZOg

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Используя |=, можно просто выполнить обновление, написав:

.a.b.c |= [.[]|.[].x=97]

или, возможно, более четко:

.a.b.c |= map(.[].x=97)

Если вы действительно хотите "изменить значениеall x keys ", тогда вы можете использовать walk:

walk(if type == "object" and has("x") then .x=97 else . end)

(Если ваш jq не имеет walk, то вы можете перехватить его def из Интернета, например, из встроенного .JQ )

0 голосов
/ 01 октября 2018

Чтобы изменить все значения x на 97, вы можете попробовать эту команду jq:

<file jq '.a.b.c as $in | .a.b.c=[ $in[] | .[].x=97 ]'

Команда сохраняет родителя объекта в переменной $in, так что вы можете изменитьодин из его подэлемента.

...