Как изменить структуру вложенных / рекурсивных JSON - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть массив JSON, который выглядит следующим образом:

[
    {id:1, name:"Name1", data1:"x", data2:"x", children:
        [
            {id:2, name:"Name2", data1:"x", data2:"x"},
            {id:3, name:"Name3", data1:"x", data2:"x", children:[...]},
        ]
    },
    {text: ..... },
    ...
]

И мне нужно сделать аналогичный массив JSON. Мне просто нужно, чтобы у каждого объекта был атрибут text, равный name. И атрибут data, который является JSON старых атрибутов, за исключением children.

. В Python это не будет большой проблемой (возможно, потребуется некоторая рекурсия), но я не могу понять, как заставить это работать в JavaScript

Так это будет выглядеть так:

[
    {text:"Name1", data:{id:1, name:"Name1", data1:"x", data2:"x"}, children:
        [
            {text:"Name2", data:{id:2, name:"Name2", data1:"x", data2:"x"}},
            {text:"Name3", data:{id:3, name:"Name3", data1:"x", data2:"x"}, children:[...]},
        ]
    },
    {id:4 ..... },
    ...
]

1 Ответ

0 голосов
/ 03 февраля 2020

@ Глен К помог мне с его комментарием. Я только что использовал Array.map с mp рекурсивной вспомогательной функцией.

    mp = function (obj) {
        var children = [];
        if (obj.children && obj.children.length) {
            children = obj.children.map(x => mp(x));
        }
        return {text: obj.name, data: obj, children:children}
    };

    new_json = old_json.map(x => mp(x));
...