修复类似JSON的文件中的未加引号的键,以便它使用正确的JSON语法

aks*_*tia 0 python regex json

我有一个非常大的类JSON文件,但它没有使用正确的JSON语法:没有引用对象键.我想编写一个脚本来修复文件,以便我可以加载它json.loads.

我需要匹配后跟冒号的所有单词,并用引用的单词替换它们.我认为正则表达式是\w+\s*:我应该使用的re.sub,但我不确定如何做到这一点.

如何获取以下输入并获得给定的输出?

# In
{abc : "xyz", cde : {}, fgh : ["hfz"]}
# Out
{"abc" : "xyz", "cde" : {}, "fgh" : ["hfz"]}

# In
{
    a: "b",
    b: {
        c: "d",
        d: []
    },
    e: "f"
}
# Out
{
    "a": "b",
    "b": {
        "c": "d",
        "d": []
    },
    "e": "f"
}
Run Code Online (Sandbox Code Playgroud)

Zer*_*eus 9

您可以利用以下事实,而不是可能脆弱的正则表达式解决方案,虽然您的日志文件不是有效的JSON,但它有效的YAML.使用PyYAML库,您可以将其加载到Python数据结构中,然后将其作为有效的JSON写回:

import json
import yaml

with open("original.log") as f:
    data = yaml.load(f)

with open("jsonified.log", "w") as f:
    json.dump(data, f)
Run Code Online (Sandbox Code Playgroud)