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

pandas1.4.2 read_json读取JSON报Expected object or value错误

问题产生原因

pandas 1.4.2版本的pd.read_json默认采用严格JSON解析规则,且默认使用utf-8编码读取文件,对非标准JSON、特殊编码头的兼容性较差。
Toad导出向导默认配置生成的JSON文件通常存在以下问题,直接读取就会触发ValueError: Expected object or value报错:

  • 文件默认携带UTF-8 BOM头,用普通utf-8编码读取时,开头的BOM标记会被识别为非法字符,解析器无法匹配到合法的JSON起始结构。
  • 导出内容存在非标准JSON语法:最常见的是数组、对象最后一个元素后多余尾逗号,特殊字符未按JSON规范转义,严格解析模式下会直接判定格式非法。
  • 部分默认导出配置会在文件首尾自动追加导出说明注释、空行,导致文件整体不是纯JSON结构,解析器读取开头内容时找不到合法的JSON对象/数组标记。
解决方案

按优先级从简单到复杂尝试即可:

  • 方案1:指定BOM兼容编码读取,解决占比最高的编码问题
import pandas as pd
df = pd.read_json('file.json', orient='records', encoding='utf-8-sig')
  • 方案2:如果方案1仍报错,先读取文本修正常见格式问题,再转换为DataFrame,适配非标准JSON语法问题
import pandas as pd
import json
import re

# 读取文件内容,自动兼容带BOM的UTF-8编码
with open('file.json', 'r', encoding='utf-8-sig') as f:
    raw_content = f.read()

# 正则清除Toad导出最常见的尾逗号问题
fixed_content = re.sub(r',\s*([}\]])', r'\1', raw_content)

# 解析为Python原生列表后转DataFrame
# 若解析后发现外层套了导出包装字段(例如结构为{"data": [记录列表]}),取对应字段值传入即可:json.loads(fixed_content)['data']
df = pd.DataFrame(json.loads(fixed_content))
  • 前置排查:如果以上方案都执行失败,直接用文本编辑器打开file.json,检查文件首尾是否存在多余的导出说明文字、结构是否和给出的示例一致,手动删除所有非JSON内容后再读取即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:45:14