Как переместить элемент в (новый) дочерний элемент? - PullRequest
0 голосов
/ 30 мая 2018

Рассмотрим этот документ:

{"x": [
    {
        "a": {
            "b": [],
            "c": 42
        }
    },
    {
        "a": {
            "d": true
        }
    }
]}

Но теперь мне нужно переместить все b с (которые не должны существовать!) На один уровень ниже, как это:

{"x": [
    {
        "a": {
            "e": {
                "b": []
            },
            "c": 42
        }
    },
    {
        "a": {
            "d": true
        }
    }
]}

IЯ видел пример, который делает противоположное , но я не смог применить это к моему делу, к сожалению.

1 Ответ

0 голосов
/ 30 мая 2018

Предполагая, что ввод является допустимым JSON, и что допустимо применять преобразование везде, где это возможно, я бы использовал walk для простоты:

walk( if type == "object" and has("b")
      then .e = .b | del(.b)
      else . end )

Возможно, вы захотите проверитьсуществование .e также, чтобы избежать его засеивания.

Если ваш jq не имеет walk, просто вставьте его def перед вышеприведенным;для определения, просто Google для: JQ «Def Walk»

...