Python版本3.5
我尝试使用json作为格式进行API调用来配置设备。一些json会根据所需的命名而变化,因此我需要调用字符串中的变量。我可以使用旧样式%s... % (variable)
完成此操作,但不能使用新样式{}... .format(variable)
。
失败EX:
(Testing with {"fvAp":{"attributes":{"name":(variable)}}})
a = "\"app-name\""
app_config = ''' { "fvAp": { "attributes": { "name": {} }, "children": [ { "fvAEPg": { "attributes": { "name": "app" }, "children": [ { "fvRsBd": { "attributes": { "tnFvBDName": "default" }, } } ] } }, { "fvAEPg": { "attributes": { "name": "db" }, "children": [ { "fvRsBd": { "attributes": { "tnFvBDName": "default" }, } } ] } } ] } } '''.format(a)
print(app_config)
追溯(最近一次调用):File“C:/...,line 49,in '''.format('a ')KeyError:'\n“fvAp”'
工作EX:
a = "\"app-name\""
app_config = ''' { "fvAp": { "attributes": { "name": %s }, "children": [ { "fvAEPg": { "attributes": { "name": "app" }, "children": [ { "fvRsBd": { "attributes": { "tnFvBDName": "default" }, } } ] } }, { "fvAEPg": { "attributes": { "name": "db" }, "children": [ { "fvRsBd": { "attributes": { "tnFvBDName": "default" }, } } ] } } ] } } ''' % a
print(app_config)
如何使用str.format
方法来实现?
2条答案
按热度按时间icnyk63a1#
Format String Syntax section说道:
格式字符串包含由花括号
{}
包围的“替换字段”。任何不包含在花括号中的内容都被认为是文本,它被原封不动地复制到输出中。如果你需要在文本中包含一个花括号字符,它可以通过加倍来转义:{{
和}}
。因此,如果你想使用
.format
方法,你需要转义模板字符串中的所有JSON花括号:看起来真的很糟
使用
string.Template
有一个更好的方法:尽管我建议完全放弃以这种方式生成配置的想法,而是使用工厂函数和
json.dumps
:hwazgwia2#
看起来你试图用运行时对应的值替换json文件中的动态值。在这种情况下,你可以使用
PLACEHOLDER
。在你想用动态值替换它们的地方,使用PLACEHOLDER
值来构建你的json。例如:
然后,您可以读取json文件,并通过传递要替换的值的字典来执行更新。