我遇到了另一个返回相同错误的问题。
单引号问题
我使用了 json 字符串单引号 :
{
'property': 1
}
But json.loads
json 属性仅接受双引号 :
{
"property": 1
}
最后的逗号问题
json.loads
不接受最后的逗号:
{
"property": "text",
"property2": "text2",
}
解决方案:ast
解决单引号和最后逗号问题
您可以使用ast
(Python 2 和 3 标准库的一部分)用于此处理。这是一个例子:
import ast
# ast.literal_eval() return a dict object, we must use json.dumps to get JSON string
import json
# Single quote to double with ast.literal_eval()
json_data = "{'property': 'text'}"
json_data = ast.literal_eval(json_data)
print(json.dumps(json_data))
# Displays : {"property": "text"}
# ast.literal_eval() with double quotes
json_data = '{"property": "text"}'
json_data = ast.literal_eval(json_data)
print(json.dumps(json_data))
# Displays : {"property": "text"}
# ast.literal_eval() with final coma
json_data = "{'property': 'text', 'property2': 'text2',}"
json_data = ast.literal_eval(json_data)
print(json.dumps(json_data))
# Displays : {"property2": "text2", "property": "text"}
Using ast
将通过像 Python 字典一样解释 JSON 来防止单引号和最后的逗号问题(因此您必须遵循 Python 字典语法)。这是一个非常好的且安全的替代品eval()
文字结构的函数。
Python 文档 https://docs.python.org/3/library/ast.html#ast.literal_eval警告我们使用大/复杂的字符串:
警告 使用以下命令可能会导致 Python 解释器崩溃
由于堆栈深度限制,字符串足够大/复杂
Python 的 AST 编译器。
带单引号的 json.dumps
To use json.dumps
通过单引号,您可以轻松使用以下代码:
import ast
import json
data = json.dumps(ast.literal_eval(json_data_single_quote))
ast
文档
ast Python 3 文档 https://docs.python.org/3/library/ast.html
ast Python 2 文档 https://docs.python.org/2/library/ast.html
Tool
如果你经常编辑 JSON,你可以使用代码美化 https://codebeautify.org/jsonviewer。它可以帮助您修复语法错误并缩小/美化 JSON。