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

使用pandas的json_normalize()展平含嵌套listOfKeyVal的JSON文件

报错原因

你当前代码触发KeyError的核心问题为两点:

  1. meta参数用于指定根层级需要保留的字段,你填入的k1、k2、k3、k4是listOfKeyVal列表内部字典的键,不属于根层级字段,读取时自然无法匹配
  2. 你给出的JSON结构示例存在语法错误(key缺双引号、字符串value缺双引号、符号错位),如果实际读取的JSON本身格式不合法,也会导致字段读取异常,可先校验JSON格式合法性

解决方案

提供两种适配场景的处理方法,均支持单元素字典列表的展平需求:

方法1:通过json_normalize参数配置直接实现

以修正后的合法JSON结构为例,正确配置参数即可:

import pandas as pd
import json

# 示例合法JSON,替换为你实际读取的jobj对象
jobj = {
    "id": "test_id",
    "kA": "value_a",
    "kD": {"D": "vD"},
    "listOfKeyVal": [
        {
            "k1": "v1",
            "k2": "v2",
            "k3": "v3",
            "k4": "v4"
        }
    ],
    "kb": "Vb",
    "kc": "vc"
}

r1 = pd.json_normalize(
    jobj,
    record_path = "listOfKeyVal", # 要展开的列表字段路径
    # meta参数填入所有根层级需要保留的字段,嵌套的根字段用列表标注路径
    meta = ["id", "kA", ["kD", "D"], "kb", "kc"],
    record_prefix = "list_", # 可选配置:给列表内展开的字段加前缀,避免和根层级同名字段冲突
    errors = "ignore"
)

如果你的listOfKeyVal是嵌套在其他字段下的,将record_path修改为层级列表即可,比如嵌套在obj字段下就写成record_path = ["obj", "listOfKeyVal"]。

方法2:分步拼接(更适合单元素列表场景,不易出错)

如果觉得参数配置太繁琐,对于仅含1个字典的列表,可以先展平根层级字段,再拆分列表字段后横向拼接:

# 第一步:展平所有根层级非列表字段
root_df = pd.json_normalize(jobj)
# 第二步:取出listOfKeyVal中的单个字典转成DataFrame
list_df = pd.DataFrame(jobj["listOfKeyVal"])
# 第三步:删除根层级未展开的listOfKeyVal字段,和列表字段的展开结果横向合并
final_df = pd.concat([root_df.drop("listOfKeyVal", axis=1), list_df], axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:36:05