我有一个Python字符串,我想知道它是否是有效的JSON。如果字符串不是JSON,json.loads(mystring)将引发错误,但我不想捕获异常。我想要这样的东西,但它不工作:
json.loads(mystring)
if type(mysrting) == dict: myStrAfterLoading = json.loads(mystring) else: print "invalid json passed"
是否必须捕获ValueError才能查看字符串是否为JSON?
5anewei61#
正确答案是:别再不想赶上ValueError了。
ValueError
如果字符串有效,Python脚本示例将返回布尔值json:
import json def is_json(myjson): try: json_object = json.loads(myjson) except ValueError as e: return False return True print(is_json('{}')) # prints True print(is_json('{asdf}')) # prints False print(is_json('{"age":100}')) # prints True print(is_json('{'age':100 }')) # prints False print(is_json('{"age":100 }')) # prints True
5fjcxozz2#
要验证字符串需要解析它--所以如果你先检查然后再转换,它实际上需要两倍的时间。捕捉异常是最好的方法。有趣的是,你仍然可以使用if-else风格的表达式:
try: json_object = json.loads(json_string) except ValueError as e: pass # invalid json else: pass # valid json
t0ybt7op3#
有什么理由不想捕捉异常吗?请记住,在Python中测试和捕获异常可以快得惊人,而且通常是Python的做事方式,而不是测试类型(基本上,信任duck类型并做出相应的React)。为了让您的头脑更轻松,请看这里:Python if与try-except如果您仍然担心可读性,可以在代码中添加注解,解释为什么要使用try/except ;)过去,我自己也曾在Java背景下与这种方法斗争过,但这 * 确实是 * Python中最简单的方法......而且简单比复杂好。
t0ybt7op4#
None
TypeError
import json def json_loads_safe(data): try: return json.loads(data) except (ValueError, TypeError): return None
jslywgbw5#
当你可以使用如下类型时为什么要解析:
def is_json(myjson): return type(myjson) == type({}) def is_json_arr(myjson): return type(myjson) == type([{}])
5条答案
按热度按时间5anewei61#
正确答案是:别再不想赶上
ValueError
了。如果字符串有效,Python脚本示例将返回布尔值json:
5fjcxozz2#
要验证字符串需要解析它--所以如果你先检查然后再转换,它实际上需要两倍的时间。捕捉异常是最好的方法。有趣的是,你仍然可以使用if-else风格的表达式:
t0ybt7op3#
有什么理由不想捕捉异常吗?
请记住,在Python中测试和捕获异常可以快得惊人,而且通常是Python的做事方式,而不是测试类型(基本上,信任duck类型并做出相应的React)。
为了让您的头脑更轻松,请看这里:Python if与try-except
如果您仍然担心可读性,可以在代码中添加注解,解释为什么要使用try/except ;)
过去,我自己也曾在Java背景下与这种方法斗争过,但这 * 确实是 * Python中最简单的方法......而且简单比复杂好。
t0ybt7op4#
None
类型时发生的TypeError
jslywgbw5#
当你可以使用如下类型时为什么要解析: