使用 python,如何检查字符串是否是有效的 json 对象,即使字符串使用单引号



假设我有一个看起来像这样的字符串:

"{'apple': 1, 'orange': 2}"

如何确定这是否是有效的 json 对象?json.loads(( 不起作用,因为字符串使用单引号而不是双引号。将所有单引号替换为双引号似乎有风险,因为单引号被转义的可能性很小,如下所示:

"{'sentence':'let's solve the issue'}"

用双引号替换所有单引号使句子:让我们解决问题,这是不正确的。

我尝试了 demjson,https://pypi.org/project/demjson/,它奏效了,但它非常慢。有什么想法吗?

JSON 规范要求对象具有字符串键,字符串要用双引号引起来。

具有单引号字段的类似字典的对象不是 JSON。

您拥有的是其他格式。

它可以与JSON5

兼容,允许单引号字符串,并拥有自己的JSON5 python库。

这可能是一个糟糕的JSON实现,但应该在服务器上修复。JSON 输出通常使用经过良好测试的库实现,而仅 JSON 格式的输出是一种糟糕的代码气味。 它应该让一个理性的人想知道还有什么其他草率的代码。

正如每个人都已经说过的(你也发现了(,如果json.loads抛出异常,那么它就不是JSON字符串。

但是,这恰好是一个有效的python字典。如果您正在考虑将其转换为 JSON 字符串,请尝试以下操作:

>>> import json
>>> exec(' '.join(['da_dict =', "{'apple': 1, 'orange': 2}"]))
>>> json.dumps(da_dict)
'{"orange": 2, "apple": 1}'

最新更新