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