Python字符串格式化问题:修正JSON中partition字段的引号错误
解决方案
你之前的replace没生效,是因为原字符串里的"[和]"是被转义的(实际是\"[和]\"),而且单纯替换转义符还不够,还要把外层的字符串引号改成数组格式。以下是几种可行的方法:
方法1:精准字符串替换
直接针对原字符串里的转义字符和外层引号做替换:
original_str = '''{ "id": "123", "partition": "\"[\"partition_id=20240511\"]\"" }''' # 直接替换整个目标片段,一步到位 result_str = original_str.replace('"\"[\"partition_id=20240511\"]\""', '["partition_id=20240511"]') print(result_str)
方法2:正则表达式替换(通用场景)
如果partition_id的值不固定,用正则匹配并捕获内容,适配更多情况:
import re original_str = '''{ "id": "123", "partition": "\"[\"partition_id=20240511\"]\"" }''' # 匹配partition字段的字符串值,捕获括号内的内容并替换为数组格式 result_str = re.sub(r'"partition": "\"\[(.*?)\]\""', r'"partition": ["\1"]', original_str) print(result_str)
方法3:解析JSON后修改(最稳妥)
避免字符串替换的边缘情况,先解析成Python对象,修改后再转回JSON字符串:
import json original_str = '''{ "id": "123", "partition": "\"[\"partition_id=20240511\"]\"" }''' # 解析为字典 data = json.loads(original_str) # 提取partition字段的核心内容:去掉首尾的双引号和括号 partition_content = data['partition'].strip('"[]') # 替换为数组 data['partition'] = [partition_content] # 转回带缩进的JSON字符串 result_str = json.dumps(data, indent=4) print(result_str)
以上三种方法都能得到你期望的输出:
{ "id": "123", "partition": ["partition_id=20240511"] }
内容的提问来源于stack exchange,提问作者user2601350
相关产品推荐
相关产品推荐

