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

Python Pandas提取嵌套JSON指定字段的技术求助

解决Pandas提取嵌套JSON中关联字段的问题

Hey Arek,作为Python新手遇到嵌套JSON的提取问题太正常了,我来帮你捋清楚怎么把idDriver和vehicle里的licensePlate放到同一行!

为什么你之前的方法失败了?

你尝试用record_path=['identifications','vehicle']的时候,相当于直接把遍历层级跳到了vehicle节点,这时候meta=['idDriver']会试图在每个vehicle对象里找idDriver(显然找不到),所以没法关联到顶层的idDriver,自然就失败啦。

最简单的解决方案(适合新手理解)

我们可以分两步走:先展开identifications层级关联顶层idDriver,再从嵌套的vehicle字典里提取licensePlate:

import pandas as pd
import json

# 假设你已经从API加载好了json_data(这里用你的示例数据模拟)
json_data = json.loads("""
{ "idDriver": "100001", "defaultTripType": "private", "fleetManagerRole": null, "identifications": [ { "code": "90-00-00-77-20", "from": "2019-08-08T10:38:15Z", "rawId": "", "vehicle": { "isBusinessCar": "0", "id": "10000", "licensePlate": "ABCD", "class": "Suziki 1.6 CDTI" } } ] }
""")

# 第一步:展开identifications,关联顶层的idDriver
workdata = pd.json_normalize(json_data, record_path=['identifications'], meta=['idDriver'])

# 第二步:从vehicle列的字典中提取licensePlate
# 用get()方法更安全,避免如果vehicle为空时抛出KeyError
workdata['licensePlate'] = workdata['vehicle'].apply(lambda x: x.get('licensePlate'))

# 第三步:只保留你需要的列(可选)
final_data = workdata[['idDriver', 'licensePlate']]
print(final_data)

运行这段代码后,你会得到想要的结果:

idDriver licensePlate
0   100001          ABCD

进阶:一步用json_normalize展开嵌套字段

如果你想一步到位,也可以通过指定相对路径的meta参数来关联顶层idDriver,同时直接展开vehicle的字段:

workdata = pd.json_normalize(
    json_data['identifications'],
    # 用['..', 'idDriver']表示回到上上层(顶层)取idDriver
    meta=[['..', 'idDriver']],
    # 给vehicle的字段加前缀,避免和其他字段重名
    record_prefix='vehicle_'
)

# 重命名列名让它更友好
workdata.rename(columns={'..idDriver': 'idDriver', 'vehicle_licensePlate': 'licensePlate'}, inplace=True)
final_data = workdata[['idDriver', 'licensePlate']]

这个方法更简洁,但相对路径的写法需要你对JSON层级有清晰的理解,新手可以先从第一种方法入手哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:33:55