Python:修复无效的json字符串

Python:修复无效的json字符串,python,json,format,Python,Json,Format,我在字符串中有格式错误的JSON,如下所示: "{var_1=100, var_2={\"Code\": 200, \"Headers\": {\"content-type\": \"text/html; charset=utf-8\"}}, var_3=0}" { "var_1": "100", "var_2": { "Code": "200", "Headers": { "content-type": "text/ht

我在字符串中有格式错误的JSON,如下所示:

"{var_1=100, var_2={\"Code\": 200, \"Headers\": {\"content-type\": \"text/html; charset=utf-8\"}}, var_3=0}"
{
    "var_1": "100",
    "var_2": {
        "Code": "200",
        "Headers": {
            "content-type": "text/html; charset=utf-8"
        }
    },
    "var_3": "0"
}
我需要将其格式化为正确的JSON,如下所示:

"{var_1=100, var_2={\"Code\": 200, \"Headers\": {\"content-type\": \"text/html; charset=utf-8\"}}, var_3=0}"
{
    "var_1": "100",
    "var_2": {
        "Code": "200",
        "Headers": {
            "content-type": "text/html; charset=utf-8"
        }
    },
    "var_3": "0"
}
有没有快速解决这个问题的方法? 也许是python的第三方库? 有人遇到过类似的问题吗

提前感谢:)


干杯:)

使用带有
ast
模块的正则表达式

Ex:

import re
import ast

s = "{var_1=100, var_2={\"Code\": 200, \"Headers\": {\"content-type\": \"text/html; charset=utf-8\"}}, var_3=0}"
print(ast.literal_eval(re.sub(r"(\w+)=", r"'\1':", s)))
{'var_1': 100,
 'var_2': {'Code': 200,
           'Headers': {'content-type': "text/html; 'charset':utf-8"}},
 'var_3': 0}
输出:

import re
import ast

s = "{var_1=100, var_2={\"Code\": 200, \"Headers\": {\"content-type\": \"text/html; charset=utf-8\"}}, var_3=0}"
print(ast.literal_eval(re.sub(r"(\w+)=", r"'\1':", s)))
{'var_1': 100,
 'var_2': {'Code': 200,
           'Headers': {'content-type': "text/html; 'charset':utf-8"}},
 'var_3': 0}

JSON文档需要有双引号。您需要从数据源修复数据。

这不是“格式错误的json”,这是无效的json(注意:它根本不是json)。这里最好的解决方案是在源代码(生成此无效json的代码)处解决问题-当然,如果可能的话;-)我同意它根本不是json,但基本上格式不好的json也不是json…:)是的,区别确实有点迂腐xD——但通常当我们想到“格式”时,我们想到的是表示,而不是语法。但无论如何:主要的一点是,解决原因比解决结果要好;-)当然,我同意这一点,但就我而言,我对事业没有影响。。。是的,你有权利认为这里的“格式”可能会误导人。我将更改标题,使其更加连贯。据我所知,OP要求的是“正确的JSON”,而不是打印Python dict,因此它实际上应该类似于“JSON.dumps”(ast.literal_eval(re.sub(r)(\w+”,r“'\1':”,s)),indent=2)`如果字符串包含
=
,则可能会更改不应更改的内容。只有正确的解析才能以一般方式解决这个问题。