python 在转义的 JSON 字符串中使用变量

python use variable in escaped JSON string

我正在使用 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")

当我使用硬编码字符串时,这没有任何问题。

您不需要在多行字符串中转义引号:

In [5]: TemplateData=f"""{{"quarter_num":"{"Q2"}",                                                                         
...:                       "year":"{2021}"}}"""   
Out[5]: '{"quarter_num":"Q2",\n                  "year":"2021"}'                                                                  

在这个例子中我使用了 f-string,你只需要用双大括号来转义它们

不要尝试将其写成带有插值变量的字符串。那就是疯狂。写一个 Python dict,然后使用 json.dumps().

将其转换为字符串
TemplateData = json.dumps({"quarter_num": "Q2",
                           "year": "2021",
                          })

那么如何用变量替换一些数据就很明显了。例如:

TemplateData = json.dumps({"quarter_num": "Q%s" % quarter,
                           "year": year,
                          })

这样,您的 IDE 可以帮助您编写字典,并且 Python 本身会检查您的语法,如果所有内容都在一个丑陋的大字符串中,这就不会发生。