假设我有一个看起来像这样的字符串:
"{'apple': 1, 'orange': 2}"
如何确定这是否是有效的json对象? json.loads()不起作用,因为字符串使用单引号而不是双引号。将所有单引号替换为双引号似乎很冒险,因为一旦出现单引号被转义的情况,就象这样:
"{'sentence':'let\'s solve the issue'}"
将所有单引号替换为双引号使句子:让我们解决问题,这是不正确的。
我尝试了demjson https://pypi.org/project/demjson/,它可以工作,但是速度非常慢。有什么想法吗?
答案 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}'