python在转义的JSON字符串中使用变量
Posted
技术标签:
【中文标题】python在转义的JSON字符串中使用变量【英文标题】:python use variable in escaped JSON string 【发布时间】:2021-10-04 14:44:38 【问题描述】:我正在使用 AWS SES send_templated_email 方法。 它使用了一个名为 TemplateData 的参数 TemplateData – 包含键值对的转义 JSON 字符串。键对应于模板中的变量(例如,name)。这些值表示替换电子邮件中变量的内容。
如果我使用硬编码,像这样:
TemplateData="""\"quarter_num\":\"Q2\",
\"year\":\"2021\",
"""
这行得通
但如果我想在该字符串中使用变量,例如:
TemplateData="""\"quarter_num\":\"\",
\"year\":\"\",
""".format("Q2", "2021")
这行不通。我认为这是一个逃避问题,但我不知道如何正确地做到这一点。 这是我收到的错误消息:
[ERROR] KeyError: '"quarter_num"'
Traceback (most recent call last):
File "/var/task/email_reports.py", line 35, in email_users
""".format("Q2", "2021")
当我使用硬编码字符串时,这没有任何问题。
【问题讨论】:
“这行不通”当您说“行不通”时,请始终准确告诉我们这是什么意思。不要让人猜测 这能回答你的问题吗? How can I print literal curly-brace characters in a string and also use .format on it? @juanpa.arrivillaga 错误是 boto3 错误,基本上说我没有为该参数使用正确的字符串 再次,请确切地告诉我们错误是什么。 @juanpa.arrivillaga 我添加了收到的错误消息。 【参考方案1】:不要尝试将其写为带有插值变量的字符串。那就是疯狂。编写 Python dict
,并使用 json.dumps()
将其转换为字符串。
TemplateData = json.dumps("quarter_num": "Q2",
"year": "2021",
)
那么如何用变量替换一些数据就很明显了。例如:
TemplateData = json.dumps("quarter_num": "Q%s" % quarter,
"year": year,
)
这样,您的 IDE 可以帮助您编写字典,而 Python 本身会检查您的语法,如果所有内容都在一个又大又丑的字符串中,就不会发生这种情况。
【讨论】:
我刚试过这个。不知何故,这也不起作用。我想这与 AWS 如何设计他们的 API 有关?它在这里说参数需要是一个包含键值对的转义 JSON 字符串。 docs.aws.amazon.com/ses/latest/DeveloperGuide/… @Lykosz 再次“它不工作”不是一个充分的问题描述。 @kindall 对不起,我的错。我认为这实际上解决了这个问题。 lambda 只是没有正确部署。【参考方案2】:你不需要在多行字符串中转义引号:
In [5]: TemplateData=f""""quarter_num":""Q2"",
...: "year":"2021""""
Out[5]: '"quarter_num":"Q2",\n "year":"2021"'
在这个例子中我使用了 f-string,你只需要用双大括号来转义它们
【讨论】:
硬编码方式一直有效。我需要的是在该字符串中添加变量。 这正是我正在做的:格式化字符串以将“Q2”和“2021”放在正确的位置。您可以用任何表达式替换它们,它们将被插值 对不起,你是对的。我一开始没明白。我刚试过,这行得通。以上是关于python在转义的JSON字符串中使用变量的主要内容,如果未能解决你的问题,请参考以下文章