使用Python/pandas加载JSON文件遇错误:NameError与ValueError
问题解决:JSON文件加载错误修复
方式一:本地JSON Lines文件加载(NameError修复)
错误原因
json_data 定义在for循环的try代码块内部,属于局部变量,循环结束后外部无法访问。如果第一行JSON解码失败,json_data甚至不会被定义,直接调用就会触发NameError。另外你的文件看起来是JSON Lines格式(每行一个独立JSON对象),建议把所有数据收集到列表中方便后续处理。
修复代码
import json # 提前初始化列表存储所有JSON数据 json_data_list = [] with open("/Users/davidelks/Dropbox/Personal/publicextract_charity.json", "r") as file: for line_num, line in enumerate(file, 1): line = line.strip() # 去除换行符和空白 if not line: continue # 跳过空行 try: json_data = json.loads(line) json_data_list.append(json_data) # 在这里可以逐行处理数据 except json.JSONDecodeError as e: print(f"第{line_num}行解码错误: {e}") # 现在可以访问所有加载的数据 print(f"成功加载{len(json_data_list)}条数据") # 如果需要单个对象(确认文件只有一行的话),可以取json_data_list[0]
方式二:远程Dropbox文件加载(ValueError修复)
错误原因
- Dropbox共享链接默认是网页预览(
dl=0),不是原始文件下载链接,pd.read_json无法解析网页HTML内容,导致ValueError。 - 如果文件是JSON Lines格式,
pd.read_json默认按完整JSON对象解析,需要指定lines=True参数。
修复代码
import pandas as pd import altair as alt # 把Dropbox链接的dl=0改成dl=1,获取直接下载链接 df = pd.read_json( "https://www.dropbox.com/s/55vqvl1qdsdul8v/publicextract_charity.json?dl=1", encoding='utf-8', lines=True # 针对JSON Lines格式的关键参数 ) # 验证数据加载成功 print(df.head())
额外提示
- 如果不确定文件格式,可以先本地打开文件查看:如果每行一个JSON对象就是JSON Lines,否则是标准JSON数组/对象。
- 用
json模块加载远程链接的话,需要先通过requests库下载内容,再解析:
import json import requests url = "https://www.dropbox.com/s/55vqvl1qdsdul8v/publicextract_charity.json?dl=1" response = requests.get(url) response.encoding = 'utf-8' # 如果是JSON Lines json_data_list = [] for line in response.text.splitlines(): line = line.strip() if line: try: json_data = json.loads(line) json_data_list.append(json_data) except json.JSONDecodeError as e: print(f"解码错误: {e}")
内容的提问来源于stack exchange,提问作者elksie5000
相关产品推荐
相关产品推荐

