当前位置: 首页 > news >正文

python json字符串怎么用format方法填充参数值报KeyError

python json字符串怎么用format方法填充参数值报KeyError

  • 需求
  • 问题分析
  • 解决方案

需求

因为python中的字典和json中的一些变量有差异,比如:json中有null、true,在python中就不会被识别,只能转换成字符串,在通过loads()的方式转成python的字典。

在把json定义成字符串后,需要动态的传递一些参数,如下面这个例子:

if __name__ == '__main__':# tkn = util_tools.get_api_tkn()# template_api = ArchCategoryApi(tkn)# res = template_api.get_template_list()# print(res)json_template = '{"name": "{}", "age": "{}", "city": "{}"}'# 参数列表name = "Alice"age = 30city = "New York"# 使用 format 方法填充参数json_str = json_template.format(name, age, city)# 将字符串转换为字典json_dict = json.loads(json_str)# 验证字典内容print(json_dict)# 将字典转换回 JSON 字符串json_str_final = json.dumps(json_dict)print(json_str_final)

运行时报错:

Traceback (most recent call last):File "D:\test\edrms_api_autotest\api\arch_category_api.py", line 37, in <module>json_str = json_template.format(name, age, city)
KeyError: '"name"'Process finished with exit code 1

问题分析

出现 KeyError 异常的原因是在 JSON 字符串中使用了花括号 {} 进行字符串格式化,而 JSON 格式中的键名也使用了花括号。因此,字符串格式化时无法正确识别字符串中的占位符,导致 KeyError 异常的发生。

解决方案

要解决这个问题,我们可以使用两个花括号来转义 JSON 字符串中的花括号,使其被正确识别为普通字符而非占位符。

修改示例代码如下:

if __name__ == '__main__':# tkn = util_tools.get_api_tkn()# template_api = ArchCategoryApi(tkn)# res = template_api.get_template_list()# print(res)json_template = '{{"name": "{}", "age": "{}", "city": "{}"}}'# 参数列表name = "Alice"age = 30city = "New York"# 使用 format 方法填充参数json_str = json_template.format(name, age, city)# 将字符串转换为字典json_dict = json.loads(json_str)# 验证字典内容print(json_dict)# 将字典转换回 JSON 字符串json_str_final = json.dumps(json_dict)print(json_str_final)

运行结果:

{'name': 'Alice', 'age': '30', 'city': 'New York'}
{"name": "Alice", "age": "30", "city": "New York"}
http://www.lryc.cn/news/343958.html

相关文章:

  • C++新手村指南:入门基础
  • 智慧旅游推动旅游服务智慧化转型:借助智能科技的力量,实现旅游资源的精准匹配和高效利用,为游客提供更加便捷、舒适的旅游环境
  • Hikyuu-PF-银行股轮动交易策略实现
  • 【氮化镓】GaN功率器件在转换器设计中的挑战
  • DOTA-Gly-Asp-Tyr-Met-Gly-Trp-Met-Asp-Phe-NH2,1306310-00-8,是一种重要的多肽化合物
  • CopyClip for Mac - 高效复制粘贴,轻松管理剪贴板
  • [windows系统安装/重装系统][step-1]U盘启动盘制作,微软官方纯净系统镜像下载
  • AI换脸原理(4)——人脸对齐(关键点检测)参考文献2DFAN:代码解析
  • Sarcasm detection论文解析 |使用 BERT 进行中间任务迁移学习的刺检测
  • docker系列9:容器卷挂载(下)
  • QT ERROR: Unknown module(s) in QT: xlsx怎么办
  • npm install 卡在reify:rxjs: timing reifyNode的解决办法
  • VScode 无法连接云服务器
  • Kafka 面试题(二)
  • Spring Cloud Kubernetes 本地开发环境调试
  • 基于二维CS-SCHT变换和扩频方法的彩色图像水印嵌入和提取算法matlab仿真
  • 设计模式——行为型模式——策略模式(含实际业务使用示例、可拷贝直接运行)
  • Rust:foo(x)、foo(x),还是foo(x.clone())?
  • 「JavaEE」多线程案例1:单例模式阻塞队列
  • pdf2htmlEX:pdf 转 html,医学指南精细化处理第一步
  • 【webrtc】MessageHandler 6: 基于线程的消息处理:StunRequest实现包发送和超时重传
  • 《Python编程从入门到实践》day22
  • 介绍 ffmpeg.dll 文件以及ffmpeg.dll丢失怎么办的五种修复方法
  • AI换脸原理(6)——人脸分割介绍
  • 【C++并发编程】(二)线程的创建、分离和连接
  • 利用生成式AI重新构想ITSM的未来
  • 完美解决AttributeError: module ‘backend_interagg‘ has no attribute ‘FigureCanvas‘
  • CMakeLists.txt语法规则:条件判断中表达式说明一
  • 《QT实用小工具·五十三》会跑走的按钮
  • Servlet的几种用法?