首页 > 解决方案 > 从另一个嵌套的 json 对象创建一个嵌套的 json 对象 [HOLD]

问题描述

正如问题所述,我想从当前的 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": ''
                              }
                          ]
                      }
                  ]
              }
          ]
      }
  ]
}

如果没有孩子,那么它就变成了一个字符串(简单的键值)对。任何帮助都会受到赞赏,尤其是对于递归解决方案。

标签: javascriptjson

解决方案


尝试

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));


推荐阅读