如何在Python中将变量作为值传入JSON字符串中
Python 向JSON字符串传变量的解决方案
你之前的写法失效是因为JSON结构本身就包含花括号,和f-string的变量占位符规则冲突,f-string会把JSON本身的单花括号识别为变量边界,导致解析失败。
优先推荐方案:直接构造字典(适配Elasticsearch场景)
Elasticsearch官方Python客户端原生支持直接传入Python字典作为查询参数,不需要手动拼接JSON字符串,完全不需要处理任何转义逻辑,也不存在格式错误风险,示例代码:
from elasticsearch import Elasticsearch # 初始化客户端 es = Elasticsearch("http://localhost:9200") # 代码中的变量 customer_id_val = 123456 # 直接构造查询字典,变量直接填入对应位置即可 search_query = { "query": { "term": { "customer_id": customer_id_val } } } # 直接传入字典调用查询接口,客户端会自动完成序列化 response = es.search(index="你的索引名", query=search_query)
通用方案:用json模块自动序列化
如果确实需要生成JSON字符串,不要手动拼接,先构造Python字典,再用json.dumps()方法转为标准JSON字符串,所有特殊字符、格式要求都会自动处理,不需要手动转义:
import json customer_id_val = "test_123" query_dict = { "customer_id": customer_id_val, "other_param": "带特殊字符的'值" } # 自动生成合法JSON字符串,引号、特殊字符自动转义 json_query_str = json.dumps(query_dict, indent=2)
极端场景:强制用f-string拼接(非常不推荐)
如果一定要用f-string手动拼接JSON,需要把JSON本身的花括号转义,用两个连续的花括号{{、}}代表一个字面量花括号:
customer_id_val = 123 json_str = f''' {{ "customer_id": {customer_id_val} }} '''
这种方式容易出现引号不匹配、特殊字符转义错误、注入风险等问题,非必要不要使用。
针对你提到的是否需要手动转义字符的问题:使用前两种方案时,不需要手动转义任何字符,工具会自动完成所有格式处理,可靠性远高于手动拼接。
内容的提问来源于stack exchange,提问作者Ilya Dachkovsky
相关产品推荐
相关产品推荐

