Python如何编写lambda f-string实现JSON字符串内指定文本动态替换?
解决方案
错误原因
- 第一种f-string报错:JSON结构中的
{、}在f-string中会被默认识别为表达式插入的边界,你未对JSON字面量大括号做转义,导致f-string误判存在多层嵌套的表达式,触发SyntaxError: expressions nested too deeply。 - 第二种format报错:
str.format()同样会将单个{识别为占位符起始标记,未转义的JSON大括号会被误判为命名占位符,因此触发KeyError: ' "type"'。
可行实现
方案1:转义大括号后使用f-string(简单场景可用)
将所有JSON字面量大括号改为双大括号{{/}}做转义,仅保留变量插入位置的单大括号即可:
body = lambda x: f'''[{{ "type": "paragraph", "children": [ {{ "text": "{x}" }} ] }}]'''
注意:该方案传入的字符串如果包含双引号,会导致生成的JSON格式非法,仅适用于明确入参无特殊字符的场景
方案2:转义大括号后使用str.format
逻辑和方案1一致,转义所有JSON字面量大括号即可:
content = '[{{ "type": "paragraph", "children": [ {{ "text": "{x}" }} ] }}]' body = lambda x: content.format(x=x)
存在和方案1相同的特殊字符风险
方案3:使用json模块序列化(推荐)
直接构造Python字典结构,通过json.dumps序列化生成JSON字符串,工具会自动处理所有转义逻辑,生成的永远是合法JSON:
import json body = lambda x: json.dumps([{"type": "paragraph", "children": [{"text": x}]}])
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

