我在Python中有一个字符串,我想知道它是否是有效的JSON。
如果字符串不是JSON但是我不想捕获异常, json.loads(mystring)
将引发错误。
我想要这样的东西,但它不起作用:
if type(mysrting) == dict:
myStrAfterLoading = json.loads(mystring)
else:
print "invalid json passed"
我是否必须捕获ValueError以查看我的字符串是否为JSON?
答案 0 :(得分:37)
正确答案是:停止不想抓住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
答案 1 :(得分:21)
要验证字符串是否需要解析它 - 所以如果你检查然后转换它将花费两倍的时间。 捕获异常是最好的方法。 有趣的是,您仍然可以使用if-else样式表达式:
try:
json_object = json.loads(json_string)
except ValueError, e:
pass # invalid json
else:
pass # valid json
答案 2 :(得分:10)
你有什么理由不想捕捉异常吗?
请记住,在Python中测试和捕获异常可能非常快,并且通常是Pythonic的做事方式,而不是测试类型(基本上,信任duck typing并相应地做出反应)。
为了让您放松一下,请看一下: Python if vs try-except
如果您仍然担心可读性,请在代码中添加注释,以解释您使用try / except的原因;)
我过去一直在努力使用这种方法来自Java背景,但 确实是在Python中这样做的最简单的方法...而且简单比复杂更好。
答案 3 :(得分:-3)
为什么解析何时可以使用类型如下:
def is_json(myjson):
return type(myjson) == type({})
def is_json_arr(myjson):
return type(myjson) == type([{}])