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

使用pandas读取JSON文件遇ValueError: Expected object or value求助

解决pandas读取行式JSON文件触发ValueError: Expected object or value的问题

1. 定位文件中的无效JSON行

行式JSON要求每行都是合法独立的JSON对象,个别行的格式错误(比如引号未闭合、多余逗号、特殊字符未转义)会直接触发解析失败。可以用以下代码逐行排查:

import json

invalid_lines = []
with open('db.json', 'r', encoding='utf-8') as f:
    for idx, line in enumerate(f, 1):
        line = line.strip()
        if not line:
            continue
        try:
            json.loads(line)
        except json.JSONDecodeError as e:
            invalid_lines.append((idx, str(e)))

if invalid_lines:
    print("无效行列表:")
    for line_num, error in invalid_lines:
        print(f"第{line_num}行: {error}")
else:
    print("所有行均为合法JSON")

根据输出的错误信息,针对性修正对应行的格式即可。

2. 自动跳过无效行读取

如果不想手动修正错误行,可利用pandas的参数跳过解析失败的行:

# pandas 1.0及以上版本推荐写法
df = pd.read_json('db.json', lines=True, on_bad_lines='skip')

# 旧版本pandas写法
df = pd.read_json('db.json', lines=True, error_bad_lines=False)

该方法会自动忽略无法解析的行,正常读取有效数据。

3. 手动逐行读取并过滤

需要更精细控制时,可手动读取每行、解析后转为DataFrame:

import json
import pandas as pd

valid_data = []
with open('db.json', 'r', encoding='utf-8') as f:
    for line in f:
        line = line.strip()
        if not line:
            continue
        try:
            valid_data.append(json.loads(line))
        except json.JSONDecodeError:
            continue  # 跳过无效行

df = pd.DataFrame(valid_data)

这种方式可以自定义处理逻辑,比如记录无效行内容或尝试格式修复。

4. 检查文件编码问题

文件编码不匹配也可能导致解析失败,指定正确编码重试:

df = pd.read_json('db.json', lines=True, encoding='utf-8')

常见编码包括utf-8、gbk、utf-16,可根据文件实际编码调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:10:32