我目前有以下格式的JSON。一些键值的格式不正确,因为它们缺少双引号(“)
如何修复这些键值以使其带有双引号?
{
Name: "test",
Address: "xyz",
"Age": 40,
"Info": "test"
}
Run Code Online (Sandbox Code Playgroud)
需要:
{
"Name": "test",
"Address": "xyz",
"Age": 40,
"Info": "test"
}
Run Code Online (Sandbox Code Playgroud)
使用下面的文章,我能够在上面的INVALID JSON中找到这样的键值。但是,我找不到用双引号替换这些找到的值的有效方法。
s = "Example: String"
out = re.findall(r'\w+:', s)
Run Code Online (Sandbox Code Playgroud)
您可以使用 PyYaml。由于 JSON 是 Yaml 的子集,因此 pyyaml 可以克服缺少引号的问题。
例子
import yaml
dirty_json = """
{
key: "value",
"key2": "value"
}
"""
yaml.load(dirty_json, yaml.SafeLoader)
Run Code Online (Sandbox Code Playgroud)
使用正则表达式:
import re
data = """{ Name: "test", Address: "xyz"}"""
print( re.sub("(\w+):", r'"\1":', data) )
Run Code Online (Sandbox Code Playgroud)
输出:
{ "Name": "test", "Address": "xyz"}
Run Code Online (Sandbox Code Playgroud)
我在 JSON 中遇到了一些其他问题。想到分享对我有用的最终解决方案。
jsonStr = re.sub("((?=\D)\w+):", r'"\1":', jsonStr)
jsonStr = re.sub(": ((?=\D)\w+)", r':"\1"', jsonStr)
Run Code Online (Sandbox Code Playgroud)
另外,上面将排除日期时间戳内的双引号,其中包含:(冒号)。