使用Node.js将分层树JSON转换为平面数组

时间:2018-09-12 15:02:14

标签: javascript json node.js lodash microstrategy

我正在尝试使用Node.js创建如下所示的报告。数据是通过Microstrategy API使用的。

enter image description here

以下是我从Microstrategy获得的JSON响应

{
  "id": "12DC624040860B5401F516A2341D95C8",
  "name": "Sales Report_AB.xlsx",
  "instanceId": "A7900B0A4AD840FF327F04897A9DB4E3",
  "result": {
    "definition": {
      "attributes": [
        {
          "name": "Branch Channel",
          "id": "B449BEE543721EEB57501BBC1EDD1B3D",
          "type": "Attribute",
          "forms": [
            {
              "id": "45C11FA478E745FEA08D781CEA190FE5",
              "name": "ID",
              "dataType": "Char"
            }
          ]
        },
        {
          "name": "Branch City State",
          "id": "2DF6E4204460A79BE3A86BA9F1FE9552",
          "type": "Attribute",
          "forms": [
            {
              "id": "45C11FA478E745FEA08D781CEA190FE5",
              "name": "ID",
              "dataType": "Char"
            }
          ]
        },
        {
          "name": "Client Full Name",
          "id": "61460DC345A8EFDCCBCFB9AB0D3FEFAB",
          "type": "Attribute",
          "forms": [
            {
              "id": "45C11FA478E745FEA08D781CEA190FE5",
              "name": "ID",
              "dataType": "Char"
            }
          ]
        },
        {
          "name": "Firm",
          "id": "145C2A3E45C369BEA82B9BA3C6CA68BF",
          "type": "Attribute",
          "forms": [
            {
              "id": "45C11FA478E745FEA08D781CEA190FE5",
              "name": "ID",
              "dataType": "Char"
            }
          ]
        },
        {
          "name": "Product Group",
          "id": "5429196C44F9A365F0904DB2733C0209",
          "type": "Attribute",
          "forms": [
            {
              "id": "45C11FA478E745FEA08D781CEA190FE5",
              "name": "ID",
              "dataType": "Char"
            }
          ]
        },
        {
          "name": "Regional Manager (RM) MF",
          "id": "DE85E29F45158ED9C5B35082B399A22E",
          "type": "Attribute",
          "forms": [
            {
              "id": "45C11FA478E745FEA08D781CEA190FE5",
              "name": "ID",
              "dataType": "Char"
            }
          ]
        }
      ],
      "metrics": [
        {
          "name": "Branch Rank",
          "id": "975BE0ED4174AA52C0AF97A96D64CE7B",
          "type": "Metric",
          "min": 4,
          "max": 103,
          "numberFormatting": {
            "category": 7,
            "decimalPlaces": 0,
            "formatString": "#,##0;\"(\"#,##0\")\""
          }
        },
        {
          "name": "MF & SMA Current AUM",
          "id": "33B375744FA4A91B86A87D9FE4EEE718",
          "type": "Metric",
          "min": 145865.48,
          "max": 10530391.47,
          "numberFormatting": {
            "category": 7,
            "decimalPlaces": 0,
            "formatString": "#,##0;\"(\"#,##0\")\""
          }
        },
        {
          "name": "MF & SMA Today Sales",
          "id": "82F9DD1D4F6AC5EBA77D918D0541B9AD",
          "type": "Metric",
          "min": 15.34,
          "max": 1315.91,
          "numberFormatting": {
            "category": 7,
            "decimalPlaces": 0,
            "formatString": "#,##0;\"(\"#,##0\")\""
          }
        },
        {
          "name": "MF & SMA Pr. Month Sales",
          "id": "3890BF0C4553300D5467A7A871C66F76",
          "type": "Metric",
          "min": 388.56,
          "max": 60365.82,
          "numberFormatting": {
            "category": 7,
            "decimalPlaces": 0,
            "formatString": "#,##0;\"(\"#,##0\")\""
          }
        },
        {
          "name": "RET Today Sales",
          "id": "99DC7CD344B5B5C6DD337989077BC478",
          "type": "Metric",
          "min": 15.34,
          "max": 1315.91,
          "numberFormatting": {
            "category": 7,
            "decimalPlaces": 0,
            "formatString": "#,##0;\"(\"#,##0\")\""
          }
        },
        {
          "name": "RET Current AUM",
          "id": "981FE7E34CE4D6C3543B2B8E0367ECAA",
          "type": "Metric",
          "min": 46170.04,
          "max": 3172313.93,
          "numberFormatting": {
            "category": 7,
            "decimalPlaces": 0,
            "formatString": "#,##0;\"(\"#,##0\")\""
          }
        }
      ],
      "thresholds": []
    },
    "data": {
      "paging": {
        "total": 5,
        "current": 5,
        "offset": 0,
        "limit": 1000,
        "prev": null,
        "next": null
      },
      "root": {
        "isPartial": false,
        "children": [
          {
            "depth": 0,
            "element": {
              "attributeIndex": 0,
              "formValues": {
                "ID": "Broker Dealer"
              },
              "name": "Broker Dealer",
              "id": "hBroker Dealer;B449BEE543721EEB57501BBC1EDD1B3D"
            },
            "isPartial": false,
            "children": [
              {
                "depth": 1,
                "element": {
                  "attributeIndex": 1,
                  "formValues": {
                    "ID": "BILLINGS"
                  },
                  "name": "BILLINGS",
                  "id": "hBILLINGS;2DF6E4204460A79BE3A86BA9F1FE9552"
                },
                "isPartial": false,
                "children": [
                  {
                    "depth": 2,
                    "element": {
                      "attributeIndex": 2,
                      "formValues": {
                        "ID": "TODD H VRALSTED"
                      },
                      "name": "TODD H VRALSTED",
                      "id": "hTODD H VRALSTED;61460DC345A8EFDCCBCFB9AB0D3FEFAB"
                    },
                    "isPartial": false,
                    "children": [
                      {
                        "depth": 3,
                        "element": {
                          "attributeIndex": 3,
                          "formValues": {
                            "ID": "UBS FINANCIAL SERVICES INC."
                          },
                          "name": "UBS FINANCIAL SERVICES INC.",
                          "id": "hUBS FINANCIAL SERVICES INC.;145C2A3E45C369BEA82B9BA3C6CA68BF"
                        },
                        "isPartial": false,
                        "children": [
                          {
                            "depth": 4,
                            "element": {
                              "attributeIndex": 4,
                              "formValues": {
                                "ID": "GLOBAL BOND"
                              },
                              "name": "GLOBAL BOND",
                              "id": "hGLOBAL BOND;5429196C44F9A365F0904DB2733C0209"
                            },
                            "isPartial": false,
                            "children": [
                              {
                                "depth": 5,
                                "element": {
                                  "attributeIndex": 5,
                                  "formValues": {
                                    "ID": "Doss Steve"
                                  },
                                  "name": "Doss Steve",
                                  "id": "hDoss Steve;DE85E29F45158ED9C5B35082B399A22E"
                                },
                                "metrics": {
                                  "Branch Rank": {
                                    "rv": 4,
                                    "fv": "4",
                                    "mi": 0
                                  },
                                  "MF & SMA Current AUM": {
                                    "rv": 567490.58,
                                    "fv": "567,491",
                                    "mi": 1
                                  },
                                  "MF & SMA Today Sales": {
                                    "rv": 15.34,
                                    "fv": "15",
                                    "mi": 2
                                  },
                                  "MF & SMA Pr. Month Sales": {
                                    "rv": 388.56,
                                    "fv": "389",
                                    "mi": 3
                                  },
                                  "RET Today Sales": {
                                    "rv": 15.34,
                                    "fv": "15",
                                    "mi": 4
                                  },
                                  "RET Current AUM": {
                                    "rv": 46170.04,
                                    "fv": "46,170",
                                    "mi": 5
                                  }
                                }
                              }
                            ]
                          },
                          {
                            "depth": 4,
                            "element": {
                              "attributeIndex": 4,
                              "formValues": {
                                "ID": "LARGE CAP GROWTH"
                              },
                              "name": "LARGE CAP GROWTH",
                              "id": "hLARGE CAP GROWTH;5429196C44F9A365F0904DB2733C0209"
                            },
                            "isPartial": false,
                            "children": [
                              {
                                "depth": 5,
                                "element": {
                                  "attributeIndex": 5,
                                  "formValues": {
                                    "ID": "Doss Steve"
                                  },
                                  "name": "Doss Steve",
                                  "id": "hDoss Steve;DE85E29F45158ED9C5B35082B399A22E"
                                },
                                "metrics": {
                                  "Branch Rank": {
                                    "rv": 4,
                                    "fv": "4",
                                    "mi": 0
                                  },
                                  "MF & SMA Current AUM": {
                                    "rv": 10530391.47,
                                    "fv": "10,530,391",
                                    "mi": 1
                                  },
                                  "MF & SMA Today Sales": {
                                    "rv": 763.74,
                                    "fv": "764",
                                    "mi": 2
                                  },
                                  "MF & SMA Pr. Month Sales": {
                                    "rv": 60365.82,
                                    "fv": "60,366",
                                    "mi": 3
                                  },
                                  "RET Today Sales": {
                                    "rv": 763.74,
                                    "fv": "764",
                                    "mi": 4
                                  },
                                  "RET Current AUM": {
                                    "rv": 3172313.93,
                                    "fv": "3,172,314",
                                    "mi": 5
                                  }
                                }
                              }
                            ]
                          }
                        ]
                      }
                    ]
                  }
                ]
              },
              {
                "depth": 1,
                "element": {
                  "attributeIndex": 1,
                  "formValues": {
                    "ID": "BOULDER"
                  },
                  "name": "BOULDER",
                  "id": "hBOULDER;2DF6E4204460A79BE3A86BA9F1FE9552"
                },
                "isPartial": false,
                "children": [
                  {
                    "depth": 2,
                    "element": {
                      "attributeIndex": 2,
                      "formValues": {
                        "ID": "RORY D LINDQUIST"
                      },
                      "name": "RORY D LINDQUIST",
                      "id": "hRORY D LINDQUIST;61460DC345A8EFDCCBCFB9AB0D3FEFAB"
                    },
                    "isPartial": false,
                    "children": [
                      {
                        "depth": 3,
                        "element": {
                          "attributeIndex": 3,
                          "formValues": {
                            "ID": "MORGAN STANLEY SMITH BARNEY LLC"
                          },
                          "name": "MORGAN STANLEY SMITH BARNEY LLC",
                          "id": "hMORGAN STANLEY SMITH BARNEY LLC;145C2A3E45C369BEA82B9BA3C6CA68BF"
                        },
                        "isPartial": false,
                        "children": [
                          {
                            "depth": 4,
                            "element": {
                              "attributeIndex": 4,
                              "formValues": {
                                "ID": "SMALL CAP GROWTH"
                              },
                              "name": "SMALL CAP GROWTH",
                              "id": "hSMALL CAP GROWTH;5429196C44F9A365F0904DB2733C0209"
                            },
                            "isPartial": false,
                            "children": [
                              {
                                "depth": 5,
                                "element": {
                                  "attributeIndex": 5,
                                  "formValues": {
                                    "ID": "Doss Steve"
                                  },
                                  "name": "Doss Steve",
                                  "id": "hDoss Steve;DE85E29F45158ED9C5B35082B399A22E"
                                },
                                "metrics": {
                                  "Branch Rank": {
                                    "rv": 103,
                                    "fv": "103",
                                    "mi": 0
                                  },
                                  "MF & SMA Current AUM": {
                                    "rv": 339671.74,
                                    "fv": "339,672",
                                    "mi": 1
                                  },
                                  "MF & SMA Today Sales": {
                                    "rv": 1315.91,
                                    "fv": "1,316",
                                    "mi": 2
                                  },
                                  "MF & SMA Pr. Month Sales": {
                                    "rv": 3571.37,
                                    "fv": "3,571",
                                    "mi": 3
                                  },
                                  "RET Today Sales": {
                                    "rv": 1315.91,
                                    "fv": "1,316",
                                    "mi": 4
                                  },
                                  "RET Current AUM": {
                                    "rv": 339671.74,
                                    "fv": "339,672",
                                    "mi": 5
                                  }
                                }
                              }
                            ]
                          }
                        ]
                      }
                    ]
                  }
                ]
              }
            ]
          },
          {
            "depth": 0,
            "element": {
              "attributeIndex": 0,
              "formValues": {
                "ID": "Financial Advisor"
              },
              "name": "Financial Advisor",
              "id": "hFinancial Advisor;B449BEE543721EEB57501BBC1EDD1B3D"
            },
            "isPartial": false,
            "children": [
              {
                "depth": 1,
                "element": {
                  "attributeIndex": 1,
                  "formValues": {
                    "ID": "DENVER"
                  },
                  "name": "DENVER",
                  "id": "hDENVER;2DF6E4204460A79BE3A86BA9F1FE9552"
                },
                "isPartial": false,
                "children": [
                  {
                    "depth": 2,
                    "element": {
                      "attributeIndex": 2,
                      "formValues": {
                        "ID": "CHAD J LARSEN"
                      },
                      "name": "CHAD J LARSEN",
                      "id": "hCHAD J LARSEN;61460DC345A8EFDCCBCFB9AB0D3FEFAB"
                    },
                    "isPartial": false,
                    "children": [
                      {
                        "depth": 3,
                        "element": {
                          "attributeIndex": 3,
                          "formValues": {
                            "ID": "LPL FINANCIAL LLC"
                          },
                          "name": "LPL FINANCIAL LLC",
                          "id": "hLPL FINANCIAL LLC;145C2A3E45C369BEA82B9BA3C6CA68BF"
                        },
                        "isPartial": false,
                        "children": [
                          {
                            "depth": 4,
                            "element": {
                              "attributeIndex": 4,
                              "formValues": {
                                "ID": "SMALL CAP GROWTH"
                              },
                              "name": "SMALL CAP GROWTH",
                              "id": "hSMALL CAP GROWTH;5429196C44F9A365F0904DB2733C0209"
                            },
                            "isPartial": false,
                            "children": [
                              {
                                "depth": 5,
                                "element": {
                                  "attributeIndex": 5,
                                  "formValues": {
                                    "ID": "Doss Steve"
                                  },
                                  "name": "Doss Steve",
                                  "id": "hDoss Steve;DE85E29F45158ED9C5B35082B399A22E"
                                },
                                "metrics": {
                                  "Branch Rank": {
                                    "rv": 101,
                                    "fv": "101",
                                    "mi": 0
                                  },
                                  "MF & SMA Current AUM": {
                                    "rv": 145865.48,
                                    "fv": "145,865",
                                    "mi": 1
                                  },
                                  "MF & SMA Today Sales": {
                                    "rv": 322.84,
                                    "fv": "323",
                                    "mi": 2
                                  },
                                  "MF & SMA Pr. Month Sales": {
                                    "rv": 1507.62,
                                    "fv": "1,508",
                                    "mi": 3
                                  },
                                  "RET Today Sales": {
                                    "rv": 322.84,
                                    "fv": "323",
                                    "mi": 4
                                  },
                                  "RET Current AUM": {
                                    "rv": 145865.48,
                                    "fv": "145,865",
                                    "mi": 5
                                  }
                                }
                              }
                            ]
                          }
                        ]
                      }
                    ]
                  },
                  {
                    "depth": 2,
                    "element": {
                      "attributeIndex": 2,
                      "formValues": {
                        "ID": "PATTERSON J MCKINLAY"
                      },
                      "name": "PATTERSON J MCKINLAY",
                      "id": "hPATTERSON J MCKINLAY;61460DC345A8EFDCCBCFB9AB0D3FEFAB"
                    },
                    "isPartial": false,
                    "children": [
                      {
                        "depth": 3,
                        "element": {
                          "attributeIndex": 3,
                          "formValues": {
                            "ID": "LPL FINANCIAL LLC"
                          },
                          "name": "LPL FINANCIAL LLC",
                          "id": "hLPL FINANCIAL LLC;145C2A3E45C369BEA82B9BA3C6CA68BF"
                        },
                        "isPartial": false,
                        "children": [
                          {
                            "depth": 4,
                            "element": {
                              "attributeIndex": 4,
                              "formValues": {
                                "ID": "HIGH INCOME"
                              },
                              "name": "HIGH INCOME",
                              "id": "hHIGH INCOME;5429196C44F9A365F0904DB2733C0209"
                            },
                            "isPartial": false,
                            "children": [
                              {
                                "depth": 5,
                                "element": {
                                  "attributeIndex": 5,
                                  "formValues": {
                                    "ID": "Doss Steve"
                                  },
                                  "name": "Doss Steve",
                                  "id": "hDoss Steve;DE85E29F45158ED9C5B35082B399A22E"
                                },
                                "metrics": {
                                  "Branch Rank": {
                                    "rv": 80,
                                    "fv": "80",
                                    "mi": 0
                                  },
                                  "MF & SMA Current AUM": {
                                    "rv": 1545251.85,
                                    "fv": "1,545,252",
                                    "mi": 1
                                  },
                                  "MF & SMA Today Sales": {
                                    "rv": 662.46,
                                    "fv": "662",
                                    "mi": 2
                                  },
                                  "MF & SMA Pr. Month Sales": {
                                    "rv": 50635.32,
                                    "fv": "50,635",
                                    "mi": 3
                                  },
                                  "RET Today Sales": {
                                    "rv": 662.46,
                                    "fv": "662",
                                    "mi": 4
                                  },
                                  "RET Current AUM": {
                                    "rv": 1545251.85,
                                    "fv": "1,545,252",
                                    "mi": 5
                                  }
                                }
                              }
                            ]
                          }
                        ]
                      }
                    ]
                  }
                ]
              }
            ]
          }
        ]
      }
    }
  }
}

数据是一种树形结构,每个报表的数据可以有所不同,即子节点和子类别的数量可以更改。因此,我需要一个动态代码来构建相同的代码。我从一开始就尝试了一些方法,但无法按照自己的方式进行构建。下面是我的代码

var result = { "records": [] };
var res = test(records.result.data.root.children, result,[], 0);

console.log(res);

function test(records, result,items, index) {
    _.forEach(records, function (value, key) {        

        items.push({"depth":value.depth,"name":value.element.name});
        result.records[index] = items;

        if(typeof value.children != "undefined") {
            if(value.children.lenth > 1) {
                index++;
            }     
            test(value.children,result, items,index);
        } else {
            if(typeof value.metrics !== "undefined") {
                _.forEach(value.metrics, function (v, k) {
                    items.push({mkey:k,mval:v.fv});
                    result.records[index] = items;
                });
            }
        }
        index++;
        items = [];
    });

    return result;
}

上面的代码使用Lodash进行数组操作。我坚持了两天。请告诉我对此需要进行哪些修改

0 个答案:

没有答案