Regexp删除额外的引号,以便可以将字符串作为JSON-Python加载

Regexp删除额外的引号,以便可以将字符串作为JSON-Python加载,python,json,regex,response,Python,Json,Regex,Response,因此,在我使用requests库发出请求后,我得到一些字符串形式的数据作为响应,我希望最终使用JSON.loads()方法将其转换为JSON。字符串非常混乱,所以我必须清理它,以便它可以作为JSON对象加载 字符串可以有额外的引号,如: {"address":""home address 25"street", "date":"""} 我正在尝试创建一个regexp,帮助我删除这些额外

因此,在我使用requests库发出请求后,我得到一些字符串形式的数据作为响应,我希望最终使用JSON.loads()方法将其转换为JSON。字符串非常混乱,所以我必须清理它,以便它可以作为JSON对象加载

字符串可以有额外的引号,如:

{"address":""home address 25"street",
"date":"""}
我正在尝试创建一个regexp,帮助我删除这些额外的引用,因此结果是:

{"address":"home address 25 street",
"date":""}
我想到的是首先为所有有效的引号创建一个regexp,然后尝试为所有模式匹配字符串,除了匹配的模式,然后用一个空字符串替换它们,如“”

这是我尝试过的regexp,但它无法检测到所有有效的引用 如图所示,红点上方的引号是有效的,应该被检测到

请注意,最后一个红点上面有两个引号,这就是我想要解决的问题。

也可以忽略被遮住的部分,这是敏感信息。

您可能只需匹配所有字符串,无论内容是什么
import re

str1 = '''
{"address":""home address 25"street",
"date":"""}

'''
# Remove all " and \n
str2 = re.sub(r'["\n]', ' ', str1)

# Find all key, value pairs
data = re.findall(r'([^{,:]+):([^,:}]+)', str2)

# Reconstruct a dictionary
result = {key.strip(): value.strip() for key, value in data}

print(result)
只要它被适当的JSON结构包围。
然后在子回调函数中相应地替换双引号

匹配伪有效JSON字符串的正则表达式如下

r'([:\[,{]\s*)”(.*?)(?=\s*[:,\]}])”

在回调函数中,使用2个正则表达式替换引号

  • 第一个匹配没有被其他引号包围的引号

    r'(?更重要的问题是为什么“json”您收到的字符串生成错误。您有权访问后端吗?您可以投入大量时间清理该字符串,但它可能并不完美,您将投入比修复后端更多的时间。嘿,Tin,我正在清理公开可用的数据,所以不是我在后端工作。现在我意识到没有必要关闭镜像的某些部分,因为它是公共的。你能链接API端点吗?它可能已经逃逸了额外的
    \“
    。我无法想象他们没有向你发送无效的jsonstring。端点:也需要一个有效负载。你可以试着做一个测试{prop\u id:“SBIN00000000001”}请参阅代码中的注释。如果需要更多帮助,请告诉我。如果日期格式为dd/mon/yyyy HH:MM:SS,则此代码会弄乱日期
    >>> import re
    >>>
    >>> text = '''
    ... {"address":""home address 25"street",
    ... "date":"""}
    ... '''
    >>>
    >>> def repl_call(m):
    ...     preq = m.group(1)
    ...     qbody = m.group(2)
    ...     qbody = re.sub( r'(?<=[^"])"(?=[^"])', ' ', qbody )
    ...     qbody = re.sub( r'"', '', qbody )
    ...     return preq + '"' + qbody + '"'
    ...
    >>> print( re.sub( r'([:\[,{]\s*)"(.*?)"(?=\s*[:,\]}])', repl_call, text ))
    
    {"address":"home address 25 street",
    "date":""}