跳过破碎的jsons python

时间:2013-07-29 23:42:02

标签: python json

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

3 个答案:

答案 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,您应该尝试删除它。