【问题标题】:Tree Json to Excel using Python树 Json 到 Excel 使用 Python
【发布时间】:2021-02-24 10:59:09
【问题描述】:

我有一个具有树状结构的 JSON 文件,我想按照相同的树状外观将其转换为 excel 格式。我在Python 中尝试了json_normalise 和其他一些使用Pandas 的工作,但没有得到预期的结果。请检查我的 JSON 文件如下:

[
   {
      "Orgin":"SRO-31-202-277",
      "Cableid":"CDI-31-202-277-1001",
      "Capasity":288.0,
      "Boite":"PEC-31-202-277-1001",
      "Child":[
         
      ],
      "Childs":[
         {
            "Orgin":"PEC-31-202-277-1001",
            "Cableid":"CDI-31-202-277-1023",
            "Capasity":72.0,
            "Boite":"PBO-31-202-277-1023",
            "Child":[
               {
                  "Orgin":"PBO-31-202-277-1023",
                  "Cableid":"CDI-31-202-277-1031",
                  "Capasity":12.0,
                  "Boite":"PBO-31-202-277-1031",
                  "Child":[
                     
                  ]
               },
               {
                  "Orgin":"PBO-31-202-277-1023",
                  "Cableid":"CDI-31-202-277-1024",
                  "Capasity":72.0,
                  "Boite":"PEC-31-202-277-1024",
                  "Child":[
                     {
                        "Orgin":"PEC-31-202-277-1024",
                        "Cableid":"CDI-31-202-277-1034",
                        "Capasity":36.0,
                        "Boite":"PEC-31-202-277-1034",
                        "Child":[
                           {
                              "Orgin":"PEC-31-202-277-1034",
                              "Cableid":"CDI-31-202-277-1035",
                              "Capasity":36.0,
                              "Boite":"PBO-31-202-277-1035",
                              "Child":[
                                 {
                                    "Orgin":"PBO-31-202-277-1035",
                                    "Cableid":"CDI-31-202-277-1036",
                                    "Capasity":36.0,
                                    "Boite":"PBO-31-202-277-1036",
                                    "Child":[
                                       {
                                          "Orgin":"PBO-31-202-277-1036",
                                          "Cableid":"CDI-31-202-277-1037",
                                          "Capasity":36.0,
                                          "Boite":"PBO-31-202-277-1037",
                                          "Child":[
                                             {
                                                "Orgin":"PBO-31-202-277-1037",
                                                "Cableid":"CDI-31-202-277-1038",
                                                "Capasity":36.0,
                                                "Boite":"PBO-31-202-277-1038",
                                                "Child":[
                                                   {
                                                      "Orgin":"PBO-31-202-277-1038",
                                                      "Cableid":"CDI-31-202-277-1039",
                                                      "Capasity":36.0,
                                                      "Boite":"PBO-31-202-277-1039",
                                                      "Child":[
                                                         
                                                      ]
                                                   }
                                                ]
                                             }
                                          ]
                                       }
                                    ]
                                 }
                              ]
                           },
                           {
                              "Orgin":"PEC-31-202-277-1034",
                              "Cableid":"CDI-31-202-277-1040",
                              "Capasity":12.0,
                              "Boite":"PIA-31-202-277-1040",
                              "Child":[
                                 
                              ]
                           }
                        ]
                     },
                     {
                        "Orgin":"PEC-31-202-277-1024",
                        "Cableid":"CDI-31-202-277-1025",
                        "Capasity":72.0,
                        "Boite":"PBO-31-202-277-1025",
                        "Child":[
                           {
                              "Orgin":"PBO-31-202-277-1025",
                              "Cableid":"CDI-31-202-277-1026",
                              "Capasity":72.0,
                              "Boite":"PEC-31-202-277-1026",
                              "Child":[
                                 {
                                    "Orgin":"PEC-31-202-277-1026",
                                    "Cableid":"CDI-31-202-277-1027",
                                    "Capasity":72.0,
                                    "Boite":"PBO-31-202-277-1027",
                                    "Child":[
                                       {
                                          "Orgin":"PBO-31-202-277-1027",
                                          "Cableid":"CDI-31-202-277-1028",
                                          "Capasity":72.0,
                                          "Boite":"PBO-31-202-277-1028",
                                          "Child":[
                                             {
                                                "Orgin":"PBO-31-202-277-1028",
                                                "Cableid":"CDI-31-202-277-1029",
                                                "Capasity":12.0,
                                                "Boite":"PBO-31-202-277-1029",
                                                "Child":[
                                                   {
                                                      "Orgin":"PBO-31-202-277-1029",
                                                      "Cableid":"CDI-31-202-277-1030",
                                                      "Capasity":12.0,
                                                      "Boite":"PBO-31-202-277-1030",
                                                      "Child":[
                                                         
                                                      ]
                                                   }
                                                ]
                                             }
                                          ]
                                       }
                                    ]
                                 },
                                 {
                                    "Orgin":"PEC-31-202-277-1026",
                                    "Cableid":"CDI-31-202-277-1033",
                                    "Capasity":12.0,
                                    "Boite":"PBO-31-202-277-1033",
                                    "Child":[
                                       
                                    ]
                                 }
                              ]
                           },
                           {
                              "Orgin":"PBO-31-202-277-1025",
                              "Cableid":"CDI-31-202-277-1032",
                              "Capasity":12.0,
                              "Boite":"PBO-31-202-277-1032",
                              "Child":[
                                 
                              ]
                           }
                        ]
                     }
                  ]
               }
            ]
         },
         {
            "Orgin":"PEC-31-202-277-1001",
            "Cableid":"CDI-31-202-277-1041",
            "Capasity":24.0,
            "Boite":"PBO-31-202-277-1041",
            "Child":[
               {
                  "Orgin":"PBO-31-202-277-1041",
                  "Cableid":"CDI-31-202-277-1042",
                  "Capasity":24.0,
                  "Boite":"PBO-31-202-277-1042",
                  "Child":[
                     {
                        "Orgin":"PBO-31-202-277-1042",
                        "Cableid":"CDI-31-202-277-1043",
                        "Capasity":24.0,
                        "Boite":"PEC-31-202-277-1043",
                        "Child":[
                           {
                              "Orgin":"PEC-31-202-277-1043",
                              "Cableid":"CDI-31-202-277-1046",
                              "Capasity":12.0,
                              "Boite":"PBO-31-202-277-1046",
                              "Child":[
                                 
                              ]
                           },
                           {
                              "Orgin":"PEC-31-202-277-1043",
                              "Cableid":"CDI-31-202-277-1044",
                              "Capasity":24.0,
                              "Boite":"PBO-31-202-277-1044",
                              "Child":[
                                 {
                                    "Orgin":"PBO-31-202-277-1044",
                                    "Cableid":"CDI-31-202-277-1045",
                                    "Capasity":24.0,
                                    "Boite":"PBO-31-202-277-1045",
                                    "Child":[
                                       
                                    ]
                                 }
                              ]
                           }
                        ]
                     }
                  ]
               }
            ]
         },
         {
            "Orgin":"PEC-31-202-277-1001",
            "Cableid":"CDI-31-202-277-1047",
            "Capasity":24.0,
            "Boite":"PBO-31-202-277-1047",
            "Child":[
               {
                  "Orgin":"PBO-31-202-277-1047",
                  "Cableid":"CDI-31-202-277-1048",
                  "Capasity":24.0,
                  "Boite":"PEC-31-202-277-1048",
                  "Child":[
                     {
                        "Orgin":"PEC-31-202-277-1048",
                        "Cableid":"CDI-31-202-277-1049",
                        "Capasity":24.0,
                        "Boite":"PBO-31-202-277-1049",
                        "Child":[
                           {
                              "Orgin":"PBO-31-202-277-1049",
                              "Cableid":"CDI-31-202-277-1050",
                              "Capasity":24.0,
                              "Boite":"PBO-31-202-277-1050",
                              "Child":[
                                 {
                                    "Orgin":"PBO-31-202-277-1050",
                                    "Cableid":"CDI-31-202-277-1053",
                                    "Capasity":12.0,
                                    "Boite":"PBO-31-202-277-1053",
                                    "Child":[
                                       
                                    ]
                                 }
                              ]
                           }
                        ]
                     },
                     {
                        "Orgin":"PEC-31-202-277-1048",
                        "Cableid":"CDI-31-202-277-1052",
                        "Capasity":12.0,
                        "Boite":"PBO-31-202-277-1052",
                        "Child":[
                           
                        ]
                     }
                  ]
               },
               {
                  "Orgin":"PBO-31-202-277-1047",
                  "Cableid":"CDI-31-202-277-1051",
                  "Capasity":12.0,
                  "Boite":"PBO-31-202-277-1051",
                  "Child":[
                     
                  ]
               }
            ]
         },
         {
            "Orgin":"PEC-31-202-277-1001",
            "Cableid":"CDI-31-202-277-1002",
            "Capasity":144.0,
            "Boite":"PBO-31-202-277-1002",
            "Child":[
               {
                  "Orgin":"PBO-31-202-277-1002",
                  "Cableid":"CDI-31-202-277-1003",
                  "Capasity":144.0,
                  "Boite":"PBO-31-202-277-1003",
                  "Child":[
                     {
                        "Orgin":"PBO-31-202-277-1003",
                        "Cableid":"CDI-31-202-277-1010",
                        "Capasity":96.0,
                        "Boite":"PIA-31-202-277-1010",
                        "Child":[
                           
                        ]
                     },
                     {
                        "Orgin":"PBO-31-202-277-1003",
                        "Cableid":"CDI-31-202-277-1004",
                        "Capasity":144.0,
                        "Boite":"PBO-31-202-277-1004",
                        "Child":[
                           {
                              "Orgin":"PBO-31-202-277-1004",
                              "Cableid":"CDI-31-202-277-1005",
                              "Capasity":144.0,
                              "Boite":"PBO-31-202-277-1005",
                              "Child":[
                                 {
                                    "Orgin":"PBO-31-202-277-1005",
                                    "Cableid":"CDI-31-202-277-1006",
                                    "Capasity":144.0,
                                    "Boite":"PBO-31-202-277-1006",
                                    "Child":[
                                       {
                                          "Orgin":"PBO-31-202-277-1006",
                                          "Cableid":"CDI-31-202-277-1007",
                                          "Capasity":144.0,
                                          "Boite":"PEC-31-202-277-1007",
                                          "Child":[
                                             {
                                                "Orgin":"PEC-31-202-277-1007",
                                                "Cableid":"CDI-31-202-277-1013",
                                                "Capasity":12.0,
                                                "Boite":"PBO-31-202-277-1013",
                                                "Child":[
                                                   {
                                                      "Orgin":"PBO-31-202-277-1013",
                                                      "Cableid":"CDI-31-202-277-1014",
                                                      "Capasity":12.0,
                                                      "Boite":"PBO-31-202-277-1014",
                                                      "Child":[
                                                         
                                                      ]
                                                   }
                                                ]
                                             },
                                             {
                                                "Orgin":"PEC-31-202-277-1007",
                                                "Cableid":"CDI-31-202-277-1008",
                                                "Capasity":144.0,
                                                "Boite":"PEC-31-202-277-1008",
                                                "Child":[
                                                   {
                                                      "Orgin":"PEC-31-202-277-1008",
                                                      "Cableid":"CDI-31-202-277-1015",
                                                      "Capasity":12.0,
                                                      "Boite":"PEC-31-202-277-1015",
                                                      "Child":[
                                                         {
                                                            "Orgin":"PEC-31-202-277-1015",
                                                            "Cableid":"CDI-31-202-277-1017",
                                                            "Capasity":12.0,
                                                            "Boite":"PBO-31-202-277-1017",
                                                            "Child":[
                                                               
                                                            ]
                                                         },
                                                         {
                                                            "Orgin":"PEC-31-202-277-1015",
                                                            "Cableid":"CDI-31-202-277-1016",
                                                            "Capasity":12.0,
                                                            "Boite":"PBO-31-202-277-1016",
                                                            "Child":[
                                                               
                                                            ]
                                                         }
                                                      ]
                                                   },
                                                   {
                                                      "Orgin":"PEC-31-202-277-1008",
                                                      "Cableid":"CDI-31-202-277-1009",
                                                      "Capasity":144.0,
                                                      "Boite":"PBO-31-202-277-1009",
                                                      "Child":[
                                                         {
                                                            "Orgin":"PBO-31-202-277-1009",
                                                            "Cableid":"CDI-31-202-277-1018",
                                                            "Capasity":12.0,
                                                            "Boite":"PBO-31-202-277-1018",
                                                            "Child":[
                                                               
                                                            ]
                                                         },
                                                         {
                                                            "Orgin":"PBO-31-202-277-1009",
                                                            "Cableid":"CDI-31-202-277-1019",
                                                            "Capasity":12.0,
                                                            "Boite":"PBO-31-202-277-1019",
                                                            "Child":[
                                                               {
                                                                  "Orgin":"PBO-31-202-277-1019",
                                                                  "Cableid":"CDI-31-202-277-1020",
                                                                  "Capasity":12.0,
                                                                  "Boite":"PBO-31-202-277-1020",
                                                                  "Child":[
                                                                     {
                                                                        "Orgin":"PBO-31-202-277-1020",
                                                                        "Cableid":"CDI-31-202-277-1021",
                                                                        "Capasity":12.0,
                                                                        "Boite":"PBO-31-202-277-1021",
                                                                        "Child":[
                                                                           
                                                                        ]
                                                                     },
                                                                     {
                                                                        "Orgin":"PBO-31-202-277-1020",
                                                                        "Cableid":"CDI-31-202-277-1022",
                                                                        "Capasity":12.0,
                                                                        "Boite":"PBO-31-202-277-1022",
                                                                        "Child":[
                                                                           
                                                                        ]
                                                                     }
                                                                  ]
                                                               }
                                                            ]
                                                         }
                                                      ]
                                                   }
                                                ]
                                             }
                                          ]
                                       },
                                       {
                                          "Orgin":"PBO-31-202-277-1006",
                                          "Cableid":"CDI-31-202-277-1012",
                                          "Capasity":12.0,
                                          "Boite":"PBO-31-202-277-1012",
                                          "Child":[
                                             
                                          ]
                                       }
                                    ]
                                 }
                              ]
                           },
                           {
                              "Orgin":"PBO-31-202-277-1004",
                              "Cableid":"CDI-31-202-277-1011",
                              "Capasity":12.0,
                              "Boite":"PBO-31-202-277-1011",
                              "Child":[
                                 
                              ]
                           }
                        ]
                     }
                  ]
               }
            ]
         }
      ]
   }
]

我的预期结果如下图所示。
预期结果

我的当前输出 excel。
当前输出

请建议,我怎样才能达到预期的结果。 谢谢。

【问题讨论】:

  • 您的屏幕截图看起来非常相似。也许需要更新?

标签: python json excel pandas


【解决方案1】:

您需要使用递归函数将复杂结构展平为字典列表

尝试以下操作,将您的数据插入“Childs”变量:

import pandas as pd

Childs = [......]

def flatten_dict(childs):
    out = []
    if isinstance(childs, (list, tuple)):
        for elem in childs:
            out.extend(flatten_dict(elem))
    elif isinstance(childs, dict):
        sub_child = childs.pop('Child', [])
        out.append(childs)
        if sub_child:
            out.extend(flatten_dict(sub_child))
    return out

df = pd.DataFrame(flatten_dict(Childs))

然后您可以使用 pandas ".to_csv()" 将其写入 csv 文件以在 Execl 中打开

【讨论】:

    猜你喜欢
    • 2022-01-24
    • 2022-01-21
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多