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

2024-10-06 12:27:58 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我想要这样的东西,但不管用:

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

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


Tags: 字符串jsoniftype错误elsedictprint
3条回答

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

请记住,在Python中测试和捕获异常的速度可能非常快,而且通常是Python的工作方式,而不是测试类型(基本上,信任duck类型并相应地作出反应)。

为了让你的头脑更放松一点,请看这里: Python if vs try-except

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

在过去,我自己也曾在Java背景下与这种方法作过斗争,但这是在Python中实现这一点的最简单方法。。。简单胜过复杂。

要验证字符串,需要对其进行解析—因此,如果选中,则转换字符串所需的时间实际上是解析字符串所需时间的两倍。 捕捉异常是最好的方法。 有趣的是,您仍然可以使用if-else样式的表达式:

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

正确答案是:不要再想抓住^{}

如果字符串是有效的json,则示例Python脚本返回布尔值:

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

相关问题 更多 >