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字符串中使用变量的主要内容,如果未能解决你的问题,请参考以下文章

GO json字符串转义处理

GO json字符串转义处理

Python - 将带有转义字符的字符串转换为 json

python 如何快速转义路径字符串中的斜杠

Python:比较两个json串是不是相等,是直接把它当成字符串来比较呢?还是json.loads(),转化一下再比较

如何通过 PYTHON 为 SQL INSERT FROM OPENJSON 转义 JSON 响应中的字符