首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JSON字符串提供KeyError的字符串格式

JSON字符串提供KeyError的字符串格式
EN

Stack Overflow用户
提问于 2013-05-03 18:30:18
回答 1查看 19.2K关注 0票数 35

为什么这段代码会给出一个KeyError

代码语言:javascript
复制
output_format = """
{ 
    "File": "{filename}", 
    "Success": {success}, 
    "ErrorMessage": "{error_msg}", 
    "LogIdentifier": "{log_identifier}" 
}
"""

print output_format.format(filename='My_file_name',
                           success=True,
                           error_msg='',
                           log_identifier='123')

错误消息:

代码语言:javascript
复制
KeyError: ' "File"'
EN

回答 1

Stack Overflow用户

发布于 2020-10-21 01:43:52

正如都铎在给另一个答案的comment中提到的那样,Template类是最适合我的解决方案。我正在处理嵌套的字典或字典列表,但处理这些字典并不简单。

使用模板虽然解决方案非常简单。

我从一个转换为字符串的字典开始。然后,我将所有{实例替换为${,它是用来替换占位符的模板标识符。

实现这一点的关键点是使用模板方法safe_substitute。它将替换所有有效的占位符,如${user_id},但忽略字典结构中的任何无效占位符,如${'name': 'John', ...

替换完成后,我删除了所有剩余的$,并将字符串转换回字典。

在下面的代码中,resolve_placeholders返回一个字典,其中每个键都与有效负载字符串中的一个占位符匹配,并且值被模板类替换。

代码语言:javascript
复制
from string import Template
.
.
.
payload = json.dumps(payload)
payload = payload.replace('{', '${')
replace_values = self.resolve_placeholders(payload)
if replace_values:
    string_template = Template(payload)
    payload = string_template.safe_substitute(replace_values)
payload = payload.replace('${', '{')
payload = json.loads(payload)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16356810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档