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

时间:2019-02-10 01:52:31

标签: python json

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

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

如何确定这是否是有效的json对象? json.loads()不起作用,因为字符串使用单引号而不是双引号。将所有单引号替换为双引号似乎很冒险,因为一旦出现单引号被转义的情况,就象这样:

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

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

我尝试了demjson https://pypi.org/project/demjson/,它可以工作,但是速度非常慢。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

JSON specification要求对象具有字符串键,并且字符串必须用双引号引起来。

带有单引号字段的类似dict的对象不是JSON。

您拥有的是其他格式。

它可以与JSON5兼容,它允许使用单引号引起来的字符串,并具有自己的JSON5 python library

这可能是一个较差的JSON实现,但是应该在服务器上修复。 JSON输出通常使用经过良好测试的库来实现,而仅仅是JSON-ish的输出是一种不好的代码味道。它应该使一个有理智的人怀疑那里还有其他草率的代码。

答案 1 :(得分:0)

每个人都已经说过(您发现),如果json.loads抛出异常,则它不是JSON字符串。

但是,恰好是有效的python字典。如果要转换为JSON字符串,请尝试以下操作:

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