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

使用python,即使字符串使用单引号,如何检查字符串是否是有效的json对象?,python,json,Python,Json,假设我有一个如下所示的字符串: "{'apple': 1, 'orange': 2}" "{'sentence':'let\'s solve the issue'}" 如何确定这是否是有效的json对象?json.loads()不起作用,因为字符串使用单引号而不是双引号。将所有单引号替换为双引号似乎有风险,因为单引号可能会被转义,如下所示: "{'apple': 1, 'orange': 2}" "{'sentence':'let\'s solve the issue'}" 将所有单引号

假设我有一个如下所示的字符串:

"{'apple': 1, 'orange': 2}"
"{'sentence':'let\'s solve the issue'}"
如何确定这是否是有效的json对象?json.loads()不起作用,因为字符串使用单引号而不是双引号。将所有单引号替换为双引号似乎有风险,因为单引号可能会被转义,如下所示:

"{'apple': 1, 'orange': 2}"
"{'sentence':'let\'s solve the issue'}"
将所有单引号替换为双引号,这样的句子是:让我们解决问题,这是不正确的

我试过demjson,它成功了,但速度太慢了。有什么想法吗?

要求对象有字符串键,字符串要双引号

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

你有的是其他格式

它可能是兼容的,允许使用单引号字符串,并且有自己的

这可能是一个糟糕的JSON实现,但应该在服务器上解决。JSON输出通常使用经过良好测试的库来实现,而仅仅是JSON ish的输出是一种糟糕的代码味道。这应该会让一个理智的人想知道还有什么其他粗枝大叶的代码。

要求对象具有字符串键,并且字符串是dou我引用了他的话

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

你有的是其他格式

它可能是兼容的,允许使用单引号字符串,并且有自己的

这可能是一个糟糕的JSON实现,但应该在服务器上解决。JSON输出通常使用经过良好测试的库来实现,而仅仅是JSON ish的输出是一种糟糕的代码味道。这应该会让一个理智的人想知道还有什么其他不整洁的代码。

正如大家已经说过的(你已经发现了),如果json.loads抛出异常,则它不是json字符串

但是,这恰好是一个有效的python dict。如果您正在研究将其转换为JSON字符串,请尝试以下方法:

>>> import json
>>> exec(' '.join(['da_dict =', "{'apple': 1, 'orange': 2}"]))
>>> json.dumps(da_dict)
'{"orange": 2, "apple": 1}'
正如大家已经说过的(您已经发现),如果json.loads抛出异常,那么它就不是json字符串

但是,这恰好是一个有效的python dict。如果您正在研究将其转换为JSON字符串,请尝试以下方法:

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

如果单引号是字符串的一部分,是否假定所有单引号都被转义?请修复生成字符串的任何程序,以生成有效的JSON。将所有单引号替换为双引号会产生以下句子:让我们解决问题,这是不正确的。但它是否成功地解析为json?如果是,那么您已经回答了问题。您已经确定它不是有效的JSON对象。“
如何检查字符串是否是有效的JSON
”-如果
JSON.loads()
抛出异常,则它不是有效的JSON。就这么简单。如果所有单引号都是字符串的一部分,是否假定它们都会转义?请修复生成字符串的任何程序,以生成有效的JSON。将所有单引号替换为双引号会生成以下句子:let“让我们来解决这个问题,这是不对的。但它是否成功地解析为json?如果是,那么您已经回答了问题。您已经确定它不是有效的JSON对象。“
如何检查字符串是否是有效的JSON
”-如果
JSON.loads()
抛出异常,则它不是有效的JSON。就这么简单。不要使用
exec
创建这样的变量!这就是
ast.literal\u eval
的目的。不要使用
exec
创建这样的变量!这就是ast.literal\u eval的目的。