验证python中的String是否为JSON?

eli*_*gro 16 python json dictionary

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

json.loads(mystring) 如果字符串不是JSON但是我不想捕获异常,则会引发错误.

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

if type(mysrting) == dict:
    myStrAfterLoading = json.loads(mystring)
else:
    print "invalid json passed"
Run Code Online (Sandbox Code Playgroud)

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

Jos*_*sad 42

正确答案是:停止不想抓住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
Run Code Online (Sandbox Code Playgroud)

  • `TypeError: JSON 对象必须是 str,而不是 'Response'` 收到此错误 (2认同)

Dan*_*elB 22

要验证字符串是否需要解析它 - 所以如果你检查然后转换它将花费两倍的时间.捕获异常是最好的方法.有趣的是,您仍然可以使用if-else样式表达式:

try:
    json_object = json.loads(json_string)
except ValueError, e:
    pass # invalid json
else:
    pass # valid json
Run Code Online (Sandbox Code Playgroud)

  • 除了 python3 的“ValueError as e” (2认同)

pca*_*cao 10

你有什么理由不想抓住这个例外吗?

请记住,在Python中测试和捕获异常可能非常快,并且通常是Pythonic的处理方式,而不是测试类型(基本上,信任duck typing并相应地做出反应).

为了让你的思绪更加轻松,请看一下: Python if try-except

如果您仍然担心可读性,请在代码中添加注释以解释为什么使用try/except;)

我用这个方法我过去从Java背景的挣扎,但是这确实是在Python这样做的最简单的方法......简单比复杂好.

  • @eligro:听起来好像你认为你只能在一个地方捕获异常,或者只能在整个应用程序中捕获异常.这是一个你想要捕获特定异常的地方,因为它*适合特定的用例*. (5认同)
  • 然后在最小的代码块上执行try/except.您可以在代码中保留异常包装,并使用try/except,就像它意味着使用所有相同. (2认同)