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

如何将列表中的嵌套JSON字段解析为DataFrame?

批量解析嵌套JSON到DataFrame的错误排查与解决

问题背景

你通过API批量获取订单的嵌套JSON响应并存入列表,单个JSON能正常用json.loads()+pd.json_normalize()解析成DataFrame,但批量处理时却遇到两个错误:

  1. AttributeError: 'unicode' object has no attribute 'itervalues'
  2. 部分请求出现ValueError: No JSON object could be decoded

先看你出错的批量处理代码:

for x in lists:
    order_detail = json.loads(x)
    order_detail = json_normalize(x)  # 这里是错误根源!
    print(order_detail)

错误原因分析

1. AttributeError的直接原因

你在循环里犯了一个小疏忽:把未解析的字符串x传给了json_normalize,而不是解析后的字典对象!
单个处理时你是先json.loads(r.text)得到字典,再传给json_normalize;但批量循环里,你虽然写了json.loads(x),但后面却用了原始的x(字符串)去调用json_normalize,而json_normalize接收的是字典/可迭代对象,不是字符串,自然会抛出属性错误。

2. ValueError的原因

这个错误说明列表里的某些元素不是有效的JSON字符串,大概率是API请求失败导致的:比如订单ID不存在返回404页面文本、服务器错误返回500页面、网络波动导致响应不完整,这些内容都不是合法JSON,所以json.loads解析失败。


完整解决代码

下面是修复后的批量处理代码,同时加入了异常处理来捕获请求和解析错误:

import pandas as pd
import json
import requests

# 初始化空列表,用来存储每个订单的DataFrame
order_dataframes = []

for order_id in df.id:
    try:
        # 发送API请求
        response = requests.get(f"URL/v1/orders/{order_id}", headers=headers_order)
        # 先检查请求是否成功(比如4xx/5xx状态码会抛出异常)
        response.raise_for_status()
        
        # 解析JSON响应为字典
        order_dict = json.loads(response.text)
        # 归一化嵌套JSON到DataFrame
        single_order_df = pd.json_normalize(order_dict)
        # 将单个订单的DataFrame加入列表
        order_dataframes.append(single_order_df)
        
    except requests.exceptions.HTTPError as http_err:
        print(f"请求订单ID {order_id} 失败: {http_err}")
    except json.JSONDecodeError as json_err:
        print(f"解析订单ID {order_id} 的JSON失败: {json_err},响应内容预览: {response.text[:100]}...")
    except Exception as err:
        print(f"处理订单ID {order_id} 时发生未知错误: {err}")

# 合并所有单个订单的DataFrame为一个大的DataFrame
final_order_df = pd.concat(order_dataframes, ignore_index=True)

关键修复点

  • 确保传给pd.json_normalize的是解析后的字典对象(也就是上面代码里的order_dict),而不是原始的字符串
  • 加入response.raise_for_status()来检查API请求是否成功,避免把错误响应的文本当成JSON解析
  • 异常处理能帮你跳过有问题的订单,同时记录错误信息,方便后续排查

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:14:39