跳过损坏的JSON python
我正在从数据库中读取JSON,并使用python对其进行解析跳过损坏的JSON python,python,json,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,那么继续解析它。现在,我的程序一旦遇到损坏的json就会崩溃。 T1有几个JSON,我正在
cur1.execute("Select JSON from t1")
dataJSON = cur1.fetchall()
for row in dataJSON:
jsonparse = json.loads(row)
问题是我正在阅读的一些JSON被破坏了。
如果json不是有效的json,我希望我的程序跳过它,如果它是有效的json,那么继续解析它。现在,我的程序一旦遇到损坏的json就会崩溃。
T1有几个JSON,我正在逐一阅读 更新 您得到的是预期的字符串或缓冲区-您需要使用行[0],因为结果将是1元组。。。你想选第一列也是唯一一列 如果您确实想检查错误的json 您可以在其周围放置一个try/except:
for row in dataJSON:
try:
jsonparse = json.loads(row)
except Exception as e:
pass
现在-不要像上面那样使用
Exception
-使用当前发生的异常类型,这样就不会捕获与json加载无关的错误。。。(可能是ValueError
)更新
您得到的是预期的字符串或缓冲区-您需要使用行[0],因为结果将是1元组。。。你想选第一列也是唯一一列
如果您确实想检查错误的json
您可以在其周围放置一个try/except:
for row in dataJSON:
try:
jsonparse = json.loads(row)
except Exception as e:
pass
现在-不要像上面那样使用
Exception
-使用当前发生的异常类型,这样就不会捕获与json加载无关的错误。。。(可能是ValueError
)如果您只是想默默地忽略错误,您可以尝试包装json.loads
。除了块:
try: jsonparse = json.loads(row)
except: pass
如果您只想静默地忽略错误,可以在try中包装
json.loads
。除了块:
try: jsonparse = json.loads(row)
except: pass
试试这个:
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,则应删除该行,以尝试此操作。尝试以下操作:
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,那么您应该尝试删除它。您得到的异常是什么?我不是python开发人员,但我假设如果抛出异常(用于错误的json解析),您可以将jsonparse语句包装在try-catch语句中,以继续循环。您得到的异常是什么?我不是python开发人员,但我假设如果抛出异常(用于错误的json解析),您可以将jsonparse语句包装在try-catch语句中,以继续循环。这将默默掩盖所有错误,例如
jsonparse=josn.loads(row)
也将失败…@JonClements,尽管我同意,您必须特别检查ValueError(,ValueError除外,如e
)。仅供参考:namererror
也是一个Exception
,因此您的答案也会遇到同样的问题。我的答案是一个模板,它解释了不使用Exception
以及如何找到要使用的异常-并继续提到可能需要ValueError
。。。但是,如果不浏览模块代码和OP的数据,我就不知道他们遇到了哪些异常……这将悄悄地掩盖所有错误-例如jsonparse=josn.loads(row)
也将失败…@JonClements虽然我同意,但您必须特别检查ValueError(,ValueError除外,如e
)。仅供参考:namererror
也是一个Exception
,因此您的答案也会遇到同样的问题。我的答案是一个模板,它解释了不使用Exception
以及如何找到要使用的异常-并继续提到可能需要ValueError
。。。但是,如果不仔细阅读模块代码和OP的数据,我不知道他们遇到了哪些异常…谢谢。。我得到一个“预期的字符串或缓冲区”exception@Ankur我正在尝试json.loads('{')
->ValueError:预期对象:第1行第0列(char 0)
-这样您就可以使用ValueError
而不是Exception
-否则您将捕获太多exceptions@Ankur根据你的数据是如何“断裂”的,你也可以考虑第三方模块——它有一个稍微松驰的解析器,(例如名称不需要被引用等等),所以它可能会整理出一些更严格的解析器不能做的事情,然后你可以忽略其余的…@ankur-刚刚注意到你可能没有破坏的json数据,这是因为你正在传递一个元组。请看更新。谢谢..我得到了一个“预期的字符串或缓冲区” exception@Ankur我正在尝试json.loads(“{”)
->ValueError:预期对象:第1行第0列(char 0)
-这样您就可以使用ValueError
,而不是异常
-否则您将捕获太多exceptions@Ankur取决于“破碎”的程度您的数据是-您也可能希望考虑第三方模块-它有一个稍微松懈的解析器,(例如名字不需要被引用等等)。,因此它可能会整理出一些更严格的解析器无法完成的事情,然后您可以忽略其余部分…@ankur-刚刚注意到您可能没有损坏的json数据,这是因为您正在传递一个元组。请参阅更新。