【问题标题】:Python: fix invalid json stringPython:修复无效的 json 字符串
【发布时间】:2020-01-02 09:35:21
【问题描述】:

我在这样的字符串中有错误的 JSON 格式:

"{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"
}

是否有快速解决此问题的方法? 也许一些python的第三方库? 有人遇到过类似的问题吗?

提前致谢:)

干杯:)

【问题讨论】:

  • 这不是“格式错误的 json”,这是 invalid json(IOW:根本不是 json)。这里最好的解决方案是从源头解决问题(产生这个无效 json 的代码) - 如果可能的话,当然 ;-)
  • 我同意它根本不是 json,但基本上格式错误的 json 也不是 json... :)
  • 嗯,是的,区别确实有点迂腐 xD - 但通常当我们考虑“格式化”时,我们会考虑表示,而不是语法。但无论如何:重点是解决原因比解决结果更好;-)
  • 当然,同意这一点,但在我的情况下,我对原因没有影响......是的,你说得对,这里的“格式化”可能会产生误导。我将更改标题 - 使其更加连贯。

标签: python json format


【解决方案1】:

ast 模块中使用正则表达式

例如:

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}

【讨论】:

  • 按照我的理解,OP 要求“正确的 JSON”,而不是打印 Python 字典,所以它应该类似于 `json.dumps(ast.literal_eval(re.sub( r"(\w+)=", r"'\1':", s)), indent=2)`
  • 如果字符串包含=,这可能会改变不应该改变的东西。只有正确的解析才能以一般的方式解决这个问题。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2013-09-02
    • 2022-01-04
    • 2015-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-03
    • 1970-01-01
    相关资源
    最近更新 更多