0

我有一个 JSON,我需要从中剥离每个子文件夹的名称和位置值,以便在 Angular 的 ngx-treeview 中从 JSON 内部描绘文件夹结构。我只想拥有子文件夹,包括子文件夹中的模板。由于 JSON 对象的结构并非在所有地方都完全匹配并且不是同质的。如何从 JSON 中以确切的文件夹结构将 subFolder 值动态推送到树视图(ngx-treeview)中?

ngx-treeview JSON 应该如下所示:

templates = new TreeviewItem({
  text: "Abrechnung",
  value: 1,
  children: [
    {
      text: "Fahrtkosten",
      value: 11,
    },
    {
      text: "Lohn",
      value: 12,
    },
  ],
});

我的 JSON:

{
  "soap:Envelope": {
    "soap:Body": {
      "ns2:getTemplateTreeResponse": {
        "return": {
          "subFolders": {
            "name": "Vorlagen",
            "description": "",
            "subFolders": {
              "name": "VorlagenB",
              "description": "",
              "subFolders": [
                {
                  "name": "Abrechnung",
                  "description": "",
                  "subFolders": [
                    {
                      "name": "Fahrtkosten",
                      "description": "",
                      "documentTypes": [
                        {
                          "fullName": "\\library\\MVP\\Vorlagen\\Fahrtkostenabrechnung.template",
                          "description": "",
                          "metadata": ""
                        },
                        {
                          "fullName": "\\library\\MVP\\Vorlagen\\Fahrtkostenzusatz.template",
                          "description": "",
                          "metadata": ""
                        }
                      ]
                    },
                    {
                      "name": "Lohn",
                      "description": "",
                      "documentTypes": [
                        {
                          "fullName": "\\library\\MVP\\Vorlagen\\Gehaltsabrechnung.template",
                          "description": "",
                          "metadata": ""
                        },
                        {
                          "fullName": "\\library\\MVP\\Vorlagen\\Lohnbescheid.template",
                          "description": "",
                          "metadata": ""
                        }
                      ]
                    }
                  ],
                  "documentTypes": [
                    {
                      "fullName": "\\library\\MVP\\Vorlagen\\Fahrtkostenabrechnung.template",
                      "description": "",
                      "metadata": ""
                    },
                    {
                      "fullName": "\\library\\MVP\\Vorlagen\\Fahrtkostenzusatz.template",
                      "description": "",
                      "metadata": ""
                    },
                    {
                      "fullName": "\\library\\MVP\\Vorlagen\\Gehaltsabrechnung.template",
                      "description": "",
                      "metadata": ""
                    },
                    {
                      "fullName": "\\library\\MVP\\Vorlagen\\Lohnbescheid.template",
                      "description": "",
                      "metadata": ""
                    }
                  ]
                },
                {
                  "name": "Datenschutz",
                  "description": "",
                  "subFolders": [
                    {
                      "name": "Datenschutzbeauftragter",
                      "description": "",
                      "documentTypes": [
                        {
                          "fullName": "\\library\\MVP\\Vorlagen\\DatenschutzerklärungHD.template",
                          "description": "",
                          "metadata": ""
                        },
                        {
                          "fullName": "\\library\\MVP\\Vorlagen\\DatenschutzerklärungXD.template",
                          "description": "",
                          "metadata": ""
                        }
                      ]
                    },
                    {
                      "name": "Datenschutzerklärung",
                      "description": "",
                      "documentTypes": [
                        {
                          "fullName": "\\library\\MVP\\Vorlagen\\DatenschutzerklärungKD.template",
                          "description": "",
                          "metadata": ""
                        },
                        {
                          "fullName": "\\library\\MVP\\Vorlagen\\DatenschutzerklärungMA.template",
                          "description": "",
                          "metadata": ""
                        }
                      ]
                    }
                  ],
                  "documentTypes": [
                    {
                      "fullName": "\\library\\MVP\\Vorlagen\\DatenschutzerklärungHD.template",
                      "description": "",
                      "metadata": ""
                    },
                    {
                      "fullName": "\\library\\MVP\\Vorlagen\\DatenschutzerklärungKD.template",
                      "description": "",
                      "metadata": ""
                    },
                    {
                      "fullName": "\\library\\MVP\\Vorlagen\\DatenschutzerklärungMA.template",
                      "description": "",
                      "metadata": ""
                    },
                    {
                      "fullName": "\\library\\MVP\\Vorlagen\\DatenschutzerklärungXD.template",
                      "description": "",
                      "metadata": ""
                    }
                  ]
                },
                {
                  "name": "Mitarbeiterinfos",
                  "description": "",
                  "subFolders": {
                    "name": "Urlaub",
                    "description": "",
                    "documentTypes": [
                      {
                        "fullName": "\\library\\MVP\\Template.template",
                        "description": "",
                        "metadata": ""
                      },
                      {
                        "fullName": "\\library\\MVP\\Vorlagen\\Urlaubsantragbescheid.template",
                        "description": "",
                        "metadata": ""
                      }
                    ]
                  },
                  "documentTypes": [
                    {
                      "fullName": "\\library\\MVP\\Template.template",
                      "description": "",
                      "metadata": ""
                    },
                    {
                      "fullName": "\\library\\MVP\\Vorlagen\\Urlaubsantragbescheid.template",
                      "description": "",
                      "metadata": ""
                    }
                  ]
                },
                {
                  "name": "Sonstiges",
                  "description": "",
                  "subFolders": [
                    {
                      "name": "Freitext Briefe",
                      "description": "",
                      "documentTypes": [
                        {
                          "fullName": "\\library\\MVP\\Vorlagen\\Anschreiben1.template",
                          "description": "",
                          "metadata": ""
                        },
                        {
                          "fullName": "\\library\\MVP\\Vorlagen\\Anschreiben2.template",
                          "description": "",
                          "metadata": ""
                        }
                      ]
                    },
                    {
                      "name": "Rückfragen",
                      "description": "",
                      "documentTypes": [
                        {
                          "fullName": "\\library\\MVP\\Vorlagen\\Testvorlage.template",
                          "description": "",
                          "metadata": ""
                        },
                        {
                          "fullName": "\\library\\MVP\\Vorlagen\\TestvorlageRgfrage.template",
                          "description": "",
                          "metadata": ""
                        }
                      ]
                    }
                  ],
                  "documentTypes": [
                    {
                      "fullName": "\\library\\MVP\\Vorlagen\\Anschreiben1.template",
                      "description": "",
                      "metadata": ""
                    },
                    {
                      "fullName": "\\library\\MVP\\Vorlagen\\Anschreiben2.template",
                      "description": "",
                      "metadata": ""
                    },
                    {
                      "fullName": "\\library\\MVP\\Vorlagen\\Testvorlage.template",
                      "description": "",
                      "metadata": ""
                    },
                    {
                      "fullName": "\\library\\MVP\\Vorlagen\\TestvorlageRgfrage.template",
                      "description": "",
                      "metadata": ""
                    }
                  ]
                },
                {
                  "name": "Urlaub",
                  "description": "",
                  "subFolders": {
                    "name": "Urlaubsantrag",
                    "description": "",
                    "documentTypes": [
                      {
                        "fullName": "\\library\\MVP\\Vorlagen\\Urlaubsanfrage.template",
                        "description": "",
                        "metadata": ""
                      },
                      {
                        "fullName": "\\library\\MVP\\Vorlagen\\Urlaubsantrag.template",
                        "description": "",
                        "metadata": ""
                      }
                    ]
                  },
                  "documentTypes": [
                    {
                      "fullName": "\\library\\MVP\\Vorlagen\\Urlaubsanfrage.template",
                      "description": "",
                      "metadata": ""
                    },
                    {
                      "fullName": "\\library\\MVP\\Vorlagen\\Urlaubsantrag.template",
                      "description": "",
                      "metadata": ""
                    }
                  ]
                }
              ],
              "documentTypes": [
                {
                  "fullName": "\\library\\MVP\\Vorlagen\\Anschreiben1.template",
                  "description": "",
                  "metadata": ""
                },
                {
                  "fullName": "\\library\\MVP\\Vorlagen\\Anschreiben2.template",
                  "description": "",
                  "metadata": ""
                },
                {
                  "fullName": "\\library\\MVP\\Vorlagen\\DatenschutzerklärungHD.template",
                  "description": "",
                  "metadata": ""
                },
                {
                  "fullName": "\\library\\MVP\\Vorlagen\\DatenschutzerklärungKD.template",
                  "description": "",
                  "metadata": ""
                },
                {
                  "fullName": "\\library\\MVP\\Vorlagen\\DatenschutzerklärungMA.template",
                  "description": "",
                  "metadata": ""
                },
                {
                  "fullName": "\\library\\MVP\\Vorlagen\\DatenschutzerklärungXD.template",
                  "description": "",
                  "metadata": ""
                },
                {
                  "fullName": "\\library\\MVP\\Vorlagen\\Fahrtkostenabrechnung.template",
                  "description": "",
                  "metadata": ""
                },
                {
                  "fullName": "\\library\\MVP\\Vorlagen\\Fahrtkostenzusatz.template",
                  "description": "",
                  "metadata": ""
                },
                {
                  "fullName": "\\library\\MVP\\Vorlagen\\Gehaltsabrechnung.template",
                  "description": "",
                  "metadata": ""
                },
                {
                  "fullName": "\\library\\MVP\\Vorlagen\\Lohnbescheid.template",
                  "description": "",
                  "metadata": ""
                },
                {
                  "fullName": "\\library\\MVP\\Template.template",
                  "description": "",
                  "metadata": ""
                },
                {
                  "fullName": "\\library\\MVP\\Vorlagen\\Testvorlage.template",
                  "description": "",
                  "metadata": ""
                },
                {
                  "fullName": "\\library\\MVP\\Vorlagen\\TestvorlageRgfrage.template",
                  "description": "",
                  "metadata": ""
                },
                {
                  "fullName": "\\library\\MVP\\Vorlagen\\Urlaubsanfrage.template",
                  "description": "",
                  "metadata": ""
                },
                {
                  "fullName": "\\library\\MVP\\Vorlagen\\Urlaubsantrag.template",
                  "description": "",
                  "metadata": ""
                },
                {
                  "fullName": "\\library\\MVP\\Vorlagen\\Urlaubsantragbescheid.template",
                  "description": "",
                  "metadata": ""
                }
              ]
            },
            "documentTypes": [
              {
                "fullName": "\\library\\MVP\\Vorlagen\\Anschreiben1.template",
                "description": "",
                "metadata": ""
              },
              {
                "fullName": "\\library\\MVP\\Vorlagen\\Anschreiben2.template",
                "description": "",
                "metadata": ""
              },
              {
                "fullName": "\\library\\MVP\\Vorlagen\\DatenschutzerklärungHD.template",
                "description": "",
                "metadata": ""
              },
              {
                "fullName": "\\library\\MVP\\Vorlagen\\DatenschutzerklärungKD.template",
                "description": "",
                "metadata": ""
              },
              {
                "fullName": "\\library\\MVP\\Vorlagen\\DatenschutzerklärungMA.template",
                "description": "",
                "metadata": ""
              },
              {
                "fullName": "\\library\\MVP\\Vorlagen\\DatenschutzerklärungXD.template",
                "description": "",
                "metadata": ""
              },
              {
                "fullName": "\\library\\MVP\\Vorlagen\\Fahrtkostenabrechnung.template",
                "description": "",
                "metadata": ""
              },
              {
                "fullName": "\\library\\MVP\\Vorlagen\\Fahrtkostenzusatz.template",
                "description": "",
                "metadata": ""
              },
              {
                "fullName": "\\library\\MVP\\Vorlagen\\Gehaltsabrechnung.template",
                "description": "",
                "metadata": ""
              },
              {
                "fullName": "\\library\\MVP\\Vorlagen\\Lohnbescheid.template",
                "description": "",
                "metadata": ""
              },
              {
                "fullName": "\\library\\MVP\\Template.template",
                "description": "",
                "metadata": ""
              },
              {
                "fullName": "\\library\\MVP\\Vorlagen\\Testvorlage.template",
                "description": "",
                "metadata": ""
              },
              {
                "fullName": "\\library\\MVP\\Vorlagen\\TestvorlageRgfrage.template",
                "description": "",
                "metadata": ""
              },
              {
                "fullName": "\\library\\MVP\\Vorlagen\\Urlaubsanfrage.template",
                "description": "",
                "metadata": ""
              },
              {
                "fullName": "\\library\\MVP\\Vorlagen\\Urlaubsantrag.template",
                "description": "",
                "metadata": ""
              },
              {
                "fullName": "\\library\\MVP\\Vorlagen\\Urlaubsantragbescheid.template",
                "description": "",
                "metadata": ""
              }
            ]
          }
        }
      }
    }
  }
}
4

2 回答 2

2

这听起来更像是一个数据分析问题,而不是一个 Angular 问题。考虑以下辅助方法,它获取您的数据结构并返回一个数组,该数组递归地填充一个结构,该结构具有文件夹名称、关联的文档类型以及(如果存在)子文件夹数组:

const listName = (node: any, aggregate = []): any[] => {
  let documentTypes = [];
  if (node) {
    if (node.documentTypes && node.documentTypes instanceof Array) {
      documentTypes = node.documentTypes.map(docType => docType["fullName"]);
    }
  }
  if (node.subFolders && node.subFolders instanceof Array) {
    return aggregate.concat({
      name: node.name,
      documentTypes,
      subFolders: node.subFolders.map(folder => listName(folder))
    });
  } else if (node.subFolders) {
    return aggregate.concat({
      name: node.name,
      documentTypes,
      subFolders: [listName(node.subFolders, aggregate)]
    });
  } else {
    return aggregate.concat({ name: node.name, documentTypes, subFolders: [] });
  }
};

const tree =
  data["soap:Envelope"]["soap:Body"]["ns2:getTemplateTreeResponse"]["return"][
    "subFolders"
  ];

const structure = listName(tree);

这个递归函数很可能有一个较短的版本,但它应该让您了解如何“解构”您的源 JSON。请注意,在我的示例中,您的 json-data 已加载到变量data中。

于 2020-10-26T12:59:05.637 回答
2

@evilstiefel 比我快,但我和他在一起。听起来更像是数据转换问题,而不是 Angular 问题。

查看一个小的 StackBlitz 示例以查看我对问题的解决方案:https ://stackblitz.com/edit/angular-basic-starter-fvewdw?file=src%2Fapp%2Fapp.component.ts

于 2020-10-26T13:29:59.913 回答