You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python正确替换JSON占位符?解决大括号转义异常问题

解决Python中含CDATA的XML字符串占位符替换问题

你遇到的问题根源在于str.format()的大括号转义规则:{{会被解析为单个{,}}会被解析为单个}。如果原始XML字符串中CDATA段内的占位符是用双大括号包裹的(比如{{database}}),调用format(database="testDB")后,就会把{{database}}转换成{testDB},这就是不符合预期的原因。

下面是几种针对性的解决方法:

方法1:调整原始字符串的占位符写法

如果XML中没有其他需要保留的大括号,直接把占位符写成单大括号形式:

# 原始XML字符串,占位符用单大括号
original_xml = '<some_tag><![CDATA[{"database":"{database}"}]]></some_tag>'
# 执行替换
result = original_xml.format(database="testDB")

执行后结果为:

<some_tag><![CDATA[{"database":"testDB"}]]></some_tag>

如果XML中存在需要保留的大括号(比如JSON结构里的固定大括号),则把需要保留的大括号用双大括号包裹,要替换的占位符仍用单大括号:

# 保留{static_key},替换{database}
original_xml = '<some_tag><![CDATA[{"fixed_key":{{static_value}}, "database":"{database}"}]]></some_tag>'
result = original_xml.format(database="testDB")

执行后结果为:

<some_tag><![CDATA[{"fixed_key":{static_value}, "database":"testDB"}]]></some_tag>

方法2:改用字符串替换(无需调整原始字符串)

如果无法修改原始XML字符串的占位符格式(比如从外部文件读取的内容就是{{database}}),直接用str.replace()替换目标占位符:

original_xml = '<some_tag><![CDATA[{"database":"{{database}}"}]]></some_tag>'
result = original_xml.replace("{{database}}", "testDB")

这种方式跳过str.format()的转义逻辑,直接替换字符串片段,结果符合预期。

方法3:批量处理多占位符(适用于大量双大括号占位符场景)

如果有多个双大括号包裹的占位符,可以先统一将{{和}}转换为单大括号,再用format()批量替换:

original_xml = '<some_tag><![CDATA[{"database":"{{database}}", "username":"{{username}}"}]]></some_tag>'
# 先转换双大括号为单大括号
processed_xml = original_xml.replace("{{", "{").replace("}}", "}")
# 批量替换占位符
result = processed_xml.format(database="testDB", username="admin")

注意:这种方法仅适用于所有双大括号都是占位符的场景,如果XML中存在需要保留的双大括号结构,请勿使用。

内容的提问来源于stack exchange,提问作者Deritha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 09:30:57