我正在从数据库中读取JSON并使用python解析它。
cur1.execute("Select JSON from t1")
dataJSON = cur1.fetchall()
for row in dataJSON:
jsonparse = json.loads(row)
问题是我正在阅读的一些JSON被破坏了。 我希望我的程序跳过json,如果它不是一个有效的json,如果是,那么继续解析它。现在,一旦遇到破碎的json,我的程序就会崩溃。 T1有几个JSON,我正逐一阅读。
答案 0 :(得分:3)
<强>更新强>
你得到一个期待的字符串或缓冲区 - 你需要使用row [0],因为结果将是1元组...并且你希望获得第一个也是唯一一个列。
如果您确实想检查错误的json
你可以尝试一下/围绕它:
for row in dataJSON:
try:
jsonparse = json.loads(row)
except Exception as e:
pass
现在 - 而不是如上所述使用Exception
- 使用此时发生的异常类型,这样就不会捕获与非json加载相关的错误......(可能是ValueError
)
答案 1 :(得分:1)
如果您只想静默忽略错误,可以将json.loads
包装在try..except块中:
try: jsonparse = json.loads(row)
except: pass
答案 2 :(得分:0)
试试这个:
def f(x):
try:
return json.loads(x)
except:
pass
json_df = pd.DataFrame()
json_df = df.join(df["error"].apply(lambda x: f(x)).apply(pd.Series))
JSON 加载后,我还想将每个键值对从 JSON 转换为新列(所有 JSON 键),因此我结合使用了 apply(pd.Series)。如果您的目标只是将每一行从数据框列转换为 JSON,您应该尝试删除它。