gpt4 book ai didi

python - 如何在 json 格式的字符串中使用 str.format?

转载 作者:太空狗 更新时间:2023-10-29 20:15:20 26 4
gpt4 key购买 nike

Python 版本 3.5

我正在尝试使用 json 作为格式进行 API 调用以配置设备。一些 json 会根据所需的命名而有所不同,因此我需要在字符串中调用一个变量。我可以使用旧样式 %s... % (variable) 完成此操作,但不能使用新样式 {}... .format(variable) .

失败的例子:

(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)

Traceback (most recent call last): File "C:/..., line 49, in '''.format('a') KeyError: '\n "fvAp"'

工作经验:

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 方法让它工作?

最佳答案

Format String Syntax部分说:

Format strings contain “replacement fields” surrounded by curly braces {}. Anything that is not contained in braces is considered literal text, which is copied unchanged to the output. If you need to include a brace character in the literal text, it can be escaped by doubling: {{ and }}.

所以如果你想使用 .format 方法,你需要转义模板字符串中的所有 JSON 花括号:

>>> '{{"fvAp": {{"attributes": {{"name": {}}}}}}}'.format('"app-name"')
'{"fvAp": {"attributes": {"name": "app-name"}}}'

这看起来真的很糟糕。

有一个更好的方法可以用 string.Template 来做到这一点:

>>> from string import Template
>>> t = Template('{"fvAp": {"attributes": {"name": "${name}"}}')
>>> t.substitute(name='StackOverflow')
'{"fvAp": {"attributes": {"name": "StackOverflow"}}'

尽管我建议完全放弃以这种方式生成配置并使用工厂函数和 json.dumps 的想法相反:

>>> import json
>>> def make_config(name):
... return {'fvAp': {'attributes': {'name': name}}}
>>> app_config = make_config('StackOverflow')
>>> json.dumps(app_config)
'{"fvAp": {"attributes": {"name": "StackOverflow"}}}'

关于python - 如何在 json 格式的字符串中使用 str.format?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39948645/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com