寻求匹配JSON中"} } {"模式的Python正则表达式以修正格式
解决JSON中多对象拼接的格式解析问题
首先,你碰到的核心问题是多个独立JSON对象直接拼接在一起,这种非标准格式没法被json.loads直接解析——因为标准JSON要求顶层结构只能是单个对象或数组。我们需要把这些零散的对象合并成一个标准JSON数组,关键就是精准定位两个对象之间的分隔符} } {(可能包含空格、换行等任意空白字符),再做格式修正。
正确的正则匹配方案
你之前的正则没匹配到,大概率是没考虑到任意空白字符的情况(比如多个空格、换行符都可能出现在分隔位置)。可以用这个正则来精准匹配分隔处:
import re # 匹配 "} 任意空白 } 任意空白 {" 的模式 pattern = r'}\s*}\s*{'
完整的Python修正代码
下面是一步到位的代码示例,把你的非标准JSON转换成可直接解析的格式:
import json import re # 你的非标准JSON字符串 invalid_json = '{ "type": "object", "properties": ["Street", "Avenue", "Boulevard"] } } { "type": "object", "properties": ["Street", "Avenue", "Boulevard"] } }' # 1. 替换分隔符为 }, {,把独立对象变成数组元素格式 fixed_json_part = re.sub(pattern, '}, {', invalid_json) # 2. 给整个字符串套上数组括号,变成标准JSON数组 fixed_json = f'[{fixed_json_part}]' # 现在可以正常解析为Python列表了 result = json.loads(fixed_json) print(result)
方案说明
\s*能匹配0个或多个空白字符(包括空格、制表符、换行符),不管原始文本里的分隔是空格还是换行,都能准确命中;- 替换成
}, {后,我们把两个独立对象转换成了数组元素的分隔格式; - 最后套上
[],整个字符串就变成了标准的JSON数组,json.loads就能直接解析成包含多个对象的Python列表。
额外小提示
如果你的原始文本末尾还有多余的},可以先加一步处理去掉它:
# 去掉末尾多余的 } fixed_json_part = re.sub(r'}\s*$', '', fixed_json_part)
内容的提问来源于stack exchange,提问作者jacky luster
相关产品推荐
相关产品推荐

