Создайте вложенный объект json из другого вложенного объекта json [УДЕРЖИВАТЬ]

#javascript #json

#javascript #json

Вопрос:

Как указано в вопросе, я хочу создать новый объект из текущего объекта json.

Мой текущий объект json:

 {
  "name": "Parent",
  "children": [
      {
          "name": "Child1",
          "children": [
              {
                  "name": "GrandChid1",
                  "children": []
              },
              {
                  "name": "GrandChild2",
                  "children": []
              },
              {
                  "name": "GrandChild3",
                  "children": [
                      {
                          "name": "GrandGrandChild1",
                          "children": [
                              {
                                  "name": "GrandGrandGrandChild1",
                                  "children": []
                              },
                              {
                                  "name": "GrandGrandGrandChild2",
                                  "children": []
                              }
                          ]
                      }
                  ]
              }
          ]
      }
  ]
}
  

Теперь новый объект будет выглядеть примерно так:

 {
  "Parent": [
      {
          "Child1": [
              {
                  "GrandChid1": ''
              },
              {
                  "GrandChild2": ''
              },
              {
                  "GrandChild3": [
                      {
                          "GrandGrandChild1": [
                              {
                                  "GrandGrandGrandChild1": ''
                              },
                              {
                                  "GrandGrandGrandChild2": ''
                              }
                          ]
                      }
                  ]
              }
          ]
      }
  ]
}
  

Если дочерних элементов нет, то это становится парой строка (простое значение ключа).
Приветствуется любая помощь, особенно с рекурсивным решением.

Комментарии:

1. К вашему сведению, SO не для того, чтобы я хотел . Это из-за того, что я застрял здесь .

2. @HassanAbbas должен ли первый дочерний элемент ‘Parent’ быть Child1 : […] вместо {‘name’:’Child1′, children:[…]} в вашем желаемом выходном json?

3. Спасибо, что указали на это, с моей стороны это ошибка. Я отредактирую 🙂

Ответ №1:

Попробуйте

 let r = o=> (o.children=o.children.map(x=>r(x)),
             {[o.name]: o.children.length ? o.children:''});
  

 let c= {
  "name": "Parent",
  "children": [
      {
          "name": "Child1",
          "children": [
              {
                  "name": "GrandChid1",
                  "children": []
              },
              {
                  "name": "GrandChild2",
                  "children": []
              },
              {
                  "name": "GrandChild3",
                  "children": [
                      {
                          "name": "GrandGrandChild1",
                          "children": [
                              {
                                  "name": "GrandGrandGrandChild1",
                                  "children": []
                              },
                              {
                                  "name": "GrandGrandGrandChild2",
                                  "children": []
                              }
                          ]
                      }
                  ]
              }
          ]
      }
  ]
}

let r = o=> (o.children=o.children.map(x=>r(x)),{[o.name]: o.children.length ? o.children:''});

console.log(r(c));