如何将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
相关产品推荐
相关产品推荐

