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

如何将JSON对象转为Pandas JSON类型列?解码错误求助

解决JSONDecodeError:属性名需用双引号包裹的问题

错误原因

你代码里的json_load列本身就是Python原生的列表/字典对象,完全没必要转成字符串再用json.loads解析。当你调用.astype(str)时,Python会把字典转换成带单引号的字符串(比如{'Name': 'cd0', 'id': '1'}),但JSON规范强制要求属性名必须用双引号包裹,这就导致json.loads解析失败,抛出你看到的错误。

解决方案

情况1:原始数据是Python对象(你的当前场景)

直接去掉.astype(str).apply(json.loads)这一步,因为json_load列已经是可直接处理的Python对象:

import json
import ast
import pandas as pd

data = [[110636, [{'Name': 'cd0', 'id': '1'}, {'Name': 'cd1', 'id': '2'}, {'Name': 'cd2', 'id': '3'}]]]
df = pd.DataFrame(data, columns=['id','json_load'])
# 移除多余的类型转换和json解析步骤
print(df)
exploded = df.explode("json_load")
df = pd.json_normalize(exploded['json_load'])
print(df)

情况2:如果json_load列是带单引号的字符串(比如从文件/数据库读取的场景)

如果你的数据确实是字符串格式但用了单引号,不要用json.loads,改用ast.literal_eval来解析(它能处理Python风格的单引号语法):

# 假设df['json_load']是带单引号的字符串,比如"[{'Name': 'cd0', ...}]"
df['json_load'] = df['json_load'].apply(ast.literal_eval)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 10:09:53