使用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
相关产品推荐
相关产品推荐

