Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
跳过损坏的JSON python_Python_Json - Fatal编程技术网

跳过损坏的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,我正在

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

更新

您得到的是预期的字符串或缓冲区-您需要使用行[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数据,这是因为您正在传递一个元组。请参阅更新。