Python读取JSON转Excel遇ValueError错误,求解决方案
解决JSON转Excel时的"All arrays must be of the same length"错误
错误原因
这个错误的核心是JSON数据中不同字段对应的列表/数组长度不一致。Pandas的read_json()默认要求所有列(对应JSON的键)的行数完全匹配,当某几个键的值长度不统一时,就会抛出该异常。另外你的路径写法存在隐患:Windows路径里的反斜杠\会被Python识别为转义字符,比如\U会触发Unicode转义错误,建议改用原始字符串(加r前缀)规避。
解决方案
步骤1:先确认JSON结构
先加载并查看JSON的具体格式,明确哪些字段长度不匹配:
import json # 用原始字符串避免转义问题 with open(r'C:\Users\rajat.kapoor\Downloads\comprehensive JSON.json', 'r', encoding='utf-8') as f: data = json.load(f) print(data)
步骤2:用pd.json_normalize()处理复杂/长度不一致的JSON
如果你的JSON是嵌套结构或存在长度不一的字段,json_normalize()比read_json()更灵活,它能展平嵌套结构,同时自动用NaN填充缺失值:
import pandas as pd import json # 加载JSON数据 with open(r'C:\Users\rajat.kapoor\Downloads\comprehensive JSON.json', 'r', encoding='utf-8') as f: data = json.load(f) # 归一化JSON数据 df = pd.json_normalize(data) # 导出到Excel df.to_excel(r'C:\Users\rajat.kapoor\Desktop\JsonOutput.xlsx', index=False)
步骤3:手动对齐列表长度(可选)
如果JSON是简单键值对,且值为长度不同的列表,可以手动填充缺失值让所有列表长度统一:
import pandas as pd import json with open(r'C:\Users\rajat.kapoor\Downloads\comprehensive JSON.json', 'r', encoding='utf-8') as f: data = json.load(f) # 找到最长的列表长度 max_length = max(len(v) for v in data.values()) # 填充所有列表到相同长度,缺失值用NaN aligned_data = {k: v + [pd.NA]*(max_length - len(v)) for k, v in data.items()} # 转成DataFrame并导出 df = pd.DataFrame(aligned_data) df.to_excel(r'C:\Users\rajat.kapoor\Desktop\JsonOutput.xlsx', index=False)
额外注意点
- 路径必须用原始字符串(加
r)或者把反斜杠改成双反斜杠\\,否则会出现转义错误。 - 如果JSON文件编码不是UTF-8,要在
open()里指定对应的encoding参数,比如encoding='gbk'。
内容的提问来源于stack exchange,提问作者Sourabh Samyal
相关产品推荐
相关产品推荐

