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

pandas读取JSON文件报解码意外字符ValueError如何解决

问题根因

报错核心原因是待读取的JSON文件本身不符合语法规范,和pandas组件无关。
你提供的JSON内容中,键b的取值是字符串形式的{"c": 2},但字符串内部的双引号没有做转义,和JSON结构用来标记边界的双引号产生了冲突:
错误片段:"b": "{"c": 2}"
JSON解析器读到这段时,会把"b": "{后面的第二个双引号判定为字符串结束标记,后续的c就成了无意义的意外字符,直接抛出ValueError: Unexpected character found when decoding object value解码错误。

排查步骤
  • 优先用Python标准库定位精确错误位置:不要直接用pandas读取,先用内置json模块加载文件,报错信息会给出明确的错误行列号,比pandas的报错提示更精准:
import json
with open("你的文件路径.json", "r", encoding="utf-8") as f:
    json.load(f)

执行后抛出的错误会类似Expecting ',' delimiter: line 3 column 9 (char 24),直接对应未转义双引号的具体位置。

  • 对照JSON语法规范校验:JSON要求字符串内部的双引号必须加反斜杠\转义,否则会被识别为JSON结构的边界符号,重点检查所有字符串类型值里是否存在未转义的双引号、未闭合的括号等问题。
解决方案

根据你对b字段的实际业务需求,二选一即可:

方案1:修正源JSON文件(优先推荐)

如果b字段本身就是要存储嵌套结构化对象,不需要额外套字符串引号,直接删除多余的外层引号,写成合法JSON格式:

{
    "a": "1",
    "b": {"c": 2}
}

如果b字段确实需要存储字符串格式的JSON内容,就把字符串内部的所有双引号用反斜杠转义:

{
    "a": "1",
    "b": "{\"c\": 2}"
}

修正完成后,直接调用pandas.read_json()即可正常读取。

方案2:代码层面兼容(适用于源文件无法修改的场景)

如果源文件是第三方生成、无法直接修改,可以先按纯文本读取内容,手动修正格式错误后再加载为DataFrame:

import pandas as pd
import json

# 先读取原始文本内容
with open("你的文件路径.json", "r", encoding="utf-8") as f:
    raw_content = f.read()

# 根据实际错误场景选择修正逻辑
# 场景1:b字段应为嵌套对象,直接去掉错误包裹的字符串引号
fixed_content = raw_content.replace('"{', '{').replace('}"', '}')
# 场景2:b字段确实要存字符串JSON,转义内部双引号
# fixed_content = raw_content.replace('"{"c": 2}"', '"{\\"c\\": 2}"')

# 加载为DataFrame
df = pd.read_json(fixed_content)

# 如果b是字符串化JSON,可后续单独转成结构化对象
df["b"] = df["b"].apply(json.loads)

注意:如果JSON文件体积大、格式错误不固定,不要用硬编码字符串替换的方式处理,建议逐行做语法校验修正,避免替换逻辑误伤正常内容。

内容的提问来源于stack exchange,提问作者You know who

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 06:15:36