验证python中的String是否为JSON?

时间:2012-07-02 13:19:09

标签: python json dictionary

我在Python中有一个字符串,我想知道它是否是有效的JSON。

如果字符串不是JSON但是我不想捕获异常,

json.loads(mystring)将引发错误。

我想要这样的东西,但它不起作用:

if type(mysrting) == dict:
    myStrAfterLoading = json.loads(mystring)
else:
    print "invalid json passed"

我是否必须捕获ValueError以查看我的字符串是否为JSON?

4 个答案:

答案 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([{}])