You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现嵌套JSON转Excel:自定义列顺序排列数据

解决方案

1. 先明确字段分组

先把所有字段按需求分成三类:

  • 主字段:对应A到W列的23个核心发票信息(如invoice_id、customer_name、invoice_date等)
  • DETAILS字段:嵌套在DETAILS节点下的明细字段(如item、qty、amount等)
  • PAYMENTS字段:嵌套在PAYMENTS节点下的付款字段(如pay_method、pay_amount、pay_date等)

2. 正确展开嵌套数据

根据你的JSON结构选择对应方式展开:

场景1:DETAILS与PAYMENTS一一对应(每条明细对应一笔付款)

直接通过json_normalize同时展开两个嵌套节点,确保行对齐:

import pandas as pd
import json

# 加载JSON数据
with open("invoices.json", "r", encoding="utf-8") as f:
    invoice_data = json.load(f)

# 展开嵌套数据,保留主字段并区分DETAILS/PAYMENTS字段
df = pd.json_normalize(
    invoice_data,
    record_path=["DETAILS"],
    meta=[
        # 按顺序列出所有主字段(A-W列)
        "invoice_id", "customer_name", "invoice_date", ...,
        # 关联PAYMENTS字段,添加前缀避免重名
        ["PAYMENTS", "pay_method"], ["PAYMENTS", "pay_amount"], ["PAYMENTS", "pay_date"]
    ],
    record_prefix="DETAILS_"
)

场景2:DETAILS与PAYMENTS为独立数组(一个发票有多条明细/多笔付款)

分开展开后按发票ID关联合并:

# 展开主表+DETAILS
df_details = pd.json_normalize(
    invoice_data,
    record_path=["DETAILS"],
    meta=["invoice_id", ...]  # 主字段列表
)

# 展开主表+PAYMENTS
df_payments = pd.json_normalize(
    invoice_data,
    record_path=["PAYMENTS"],
    meta=["invoice_id"]
)

# 按发票ID合并(若有更精准的关联逻辑,可添加额外关联字段)
df_combined = pd.merge(df_details, df_payments, on="invoice_id", how="left")

3. 手动指定列顺序

无论哪种展开方式,最后强制按需求排列列:

# 严格按顺序定义列:主字段 → DETAILS字段 → PAYMENTS字段
column_order = [
    # 主字段(A-W列,按你需要的顺序排列)
    "invoice_id", "customer_name", "invoice_date", ...,
    # DETAILS字段(W列之后的字段)
    "DETAILS_item", "DETAILS_qty", "DETAILS_amount", ...,
    # PAYMENTS字段(DETAILS之后的字段)
    "PAYMENTS_pay_method", "PAYMENTS_pay_amount", "PAYMENTS_pay_date", ...
]

# 重排列并导出Excel
df = df[column_order]
df.to_excel("formatted_invoices.xlsx", index=False)

关键注意事项

  • 主字段需严格按你需要的A-W列顺序列出,确保数量为23个
  • 若DETAILS/PAYMENTS是单个对象而非数组,直接用pd.json_normalize(invoice_data)展开,无需record_path参数
  • 一对多场景下,需明确明细与付款的关联规则(如金额匹配、顺序匹配),避免数据错位

内容的提问来源于stack exchange,提问作者Eyup

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 01:16:22