You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Excel Power Query导入JSON数据:如何为嵌套字段生成单行记录

Excel Power Query: 处理嵌套JSON生成Load层级表格的高效方案

我完全理解你的需求——要把这种嵌套结构的JSON转换成以load_id/docket_no为核心的逐行表格,还要保留关联的file_no,同时适配大规模数据(不用手动指定每个load_id)。你的原始M代码因为手动展开了固定的load_id列,所以遇到大量数据会失效,还丢失了file_no,下面是更通用的解决方案:

完整的M代码

let
    Source = Json.Document(File.Contents("H:\Software\Site Apps\example-records.json")),
    RecordsTable = Record.ToTable(Source[records]),
    RenamedColumns = Table.RenameColumns(RecordsTable,{{"Name", "record_id"}, {"Value", "RecordDetails"}}),
    ExpandedRecordDetails = Table.ExpandRecordColumn(RenamedColumns, "RecordDetails", {"file_no", "loads"}, {"file_no", "loads"}),
    ConvertLoadsToTable = Table.AddColumn(ExpandedRecordDetails, "LoadTable", each Record.ToTable([loads])),
    ExpandedLoadTable = Table.ExpandTableColumn(ConvertLoadsToTable, "LoadTable", {"Name", "Value"}, {"load_id", "LoadDetails"}),
    ExpandedLoadDetails = Table.ExpandRecordColumn(ExpandedLoadTable, "LoadDetails", {"docket_no"}, {"docket_no"}),
    ReorderedColumns = Table.ReorderColumns(ExpandedLoadDetails,{"record_id", "file_no", "load_id", "docket_no"}),
    CleanedTable = Table.RemoveColumns(ReorderedColumns,{"loads"})
in
    CleanedTable

代码逻辑拆解(为什么能解决你的问题)

  • RecordsTable: 把records节点下的所有键值对转换成表格,每个record_id对应一行,Value列包含该记录的完整信息(file_noloads
  • RenamedColumns: 重命名列名让后续步骤更直观,避免默认的Name/Value造成混淆
  • ExpandedRecordDetails: 展开RecordDetails列,直接提取file_noloads,这一步就把你需要的file_no保留下来了
  • ConvertLoadsToTable: 关键一步!对每一行的loads嵌套记录,用Record.ToTable()自动转换成表格——不管有多少个load_id,都会被拆成一行行的键值对,完全不用手动指定列名,完美适配大规模数据
  • ExpandedLoadTable: 展开刚才生成的LoadTable,把每个load_id拆成独立行,同时保留对应的record_idfile_no,确保数据关联正确
  • ExpandedLoadDetails: 展开LoadDetails提取docket_no,得到最终需要的字段
  • ReorderedColumns/CleanedTable: 最后调整列顺序、清理冗余列,让表格结构更整洁

用这个代码处理你的示例JSON,会生成结构清晰的表格:

record_idfile_noload_iddocket_no
record_id_15792Cload_id_13116115
record_id_15792Cload_id_23116118
record_id_15792Cload_id_33208776
record_id_25645Cload_id_42000527155
record_id_25645Cload_id_52000527156
record_id_25645Cload_id_62000527146

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

火山引擎 最新活动