验证字符串在python中是否为JSON?

tv6aics1  于 2023-03-09  发布在  Python
关注(0)|答案(5)|浏览(135)

我有一个Python字符串,我想知道它是否是有效的JSON。
如果字符串不是JSON,json.loads(mystring)将引发错误,但我不想捕获异常。
我想要这样的东西,但它不工作:

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

是否必须捕获ValueError才能查看字符串是否为JSON?

5anewei6

5anewei61#

正确答案是:别再不想赶上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
5fjcxozz

5fjcxozz2#

要验证字符串需要解析它--所以如果你先检查然后再转换,它实际上需要两倍的时间。捕捉异常是最好的方法。有趣的是,你仍然可以使用if-else风格的表达式:

try:
    json_object = json.loads(json_string)
except ValueError as e:
    pass # invalid json
else:
    pass # valid json
t0ybt7op

t0ybt7op3#

有什么理由不想捕捉异常吗?
请记住,在Python中测试和捕获异常可以快得惊人,而且通常是Python的做事方式,而不是测试类型(基本上,信任duck类型并做出相应的React)。
为了让您的头脑更轻松,请看这里:Python if与try-except
如果您仍然担心可读性,可以在代码中添加注解,解释为什么要使用try/except ;)
过去,我自己也曾在Java背景下与这种方法斗争过,但这 * 确实是 * Python中最简单的方法......而且简单比复杂好。

t0ybt7op

t0ybt7op4#

    • 最安全的函数**,它还捕获在传递None类型时发生的TypeError
import json

def json_loads_safe(data):
    try:
        return json.loads(data)
    except (ValueError, TypeError):
        return None
jslywgbw

jslywgbw5#

当你可以使用如下类型时为什么要解析:

def is_json(myjson):
    return type(myjson) == type({})

def is_json_arr(myjson):
    return type(myjson) == type([{}])

相关问题