1

我正在从数据库中读取 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,我正在一一阅读。

4

3 回答 3

4

更新

你得到一个预期的字符串或缓冲区 - 你需要使用 row[0] 因为结果将是 1 元组......并且你希望获取第一列也是唯一的列。

如果您确实想检查错误的 json

你可以在它周围放一个 try/except :

for row in dataJSON:
    try:
        jsonparse = json.loads(row)
    except Exception as e:
        pass

现在 - 而不是Exception像上面那样使用 - 使用目前发生的异常类型,这样你就不会捕获非 json 加载相关的错误......(可能是ValueError

于 2013-07-29T23:47:17.130 回答
1

如果你只是想默默地忽略错误,你可以包装json.loads在 try..except 块中:

try: jsonparse = json.loads(row)
except: pass
于 2013-07-29T23:47:37.763 回答
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,您应该尝试删除它。

于 2021-05-05T05:23:10.283 回答