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

Python中嵌套JSON规范化及转换为Pandas DataFrame的方法

解决方法

首先纠正你代码里的两处基础问题:

  • 变量名拼写错误:jsob_obj应该是json_obj
  • 键名大小写不匹配:JSON里的键是Retaillocations,你调用时写的retailLocations,大小写不一致会导致找不到对应字段
  • 核心逻辑偏差:你要生成单条记录,不能用record_path去展开嵌套列表,否则会把每个subLocation拆成单独行,不符合需求

方案1:保留嵌套列表结构,生成单条记录

如果只是要将整个JSON转换为包含嵌套列表的单条DataFrame记录,直接使用pd.json_normalize默认参数即可:

import json
import pandas as pd

# 假设inputData是你的JSON字符串
json_obj = json.loads(inputData)
df = pd.json_normalize(json_obj)

生成的DataFrame会有一行数据,其中Retaillocations.subLocation和distributionLocations.subLocation列会存储对应的列表数据。

方案2:将嵌套列表转为字符串(便于查看和统计)

如果不想保留列表结构,可将每个subLocation的地址信息拼接成字符串,预处理后再转DataFrame:

import json
import pandas as pd

json_obj = json.loads(inputData)
# 遍历处理每个数据条目
for item in json_obj:
    # 拼接零售地址为字符串
    item['retail_addresses'] = '; '.join([f"{addr['address']} ({addr['district']})" for addr in item['Retaillocations']['subLocation']])
    # 拼接配送地址为字符串
    item['distribution_addresses'] = '; '.join([f"{addr['address']} ({addr['district']})" for addr in item['distributionLocations']['subLocation']])
    # 删除原嵌套字段
    del item['Retaillocations']
    del item['distributionLocations']

df = pd.DataFrame(json_obj)

最终生成的DataFrame包含id、city、retail_addresses、distribution_addresses四列,每行是完整的单条记录。

原代码报错原因解析

你指定record_path='retailLocations'时,一是键名拼写大小写不匹配,二是Retaillocations是字典类型,而record_path需要指向列表类型的键,因此会抛出“list indices must be integers or slices, not str”错误。如果是想展开零售地址为多行记录,才需要指定record_path=['Retaillocations', 'subLocation']并配合meta参数保留id、city,但这与你要单条记录的需求不符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 22:09:24