使用Python f-string在JSON数据列表中

7
我需要通过网站API推送数据,我正在尝试使用F-string将变量传递给数据列表,但无法找到方法。
到目前为止,我尝试了以下方法:
today = datetime.date.today()
tomorrow = today + datetime.timedelta(days = 1)

#trying to pass *tomorrow* value with f-string below

data = f'[{"date": "{tomorrow}", "price": {"amount": 15100}}]'

response = requests.put('https://api.platform.io/calendar/28528204', headers=headers, data=data)

我该如何实现这个目标?

1
data 可以是一个字典。 - BrownieInMotion
@BrownieInMotion 这是什么意思? - locq
4
在f-strings中,您应该使用{{来表示文字{,但是@BrownieInMotion是正确的;您应该直接使用数据结构:data = [{"date": tomorrow, "price": {"amount": 15100}}]requests.put会自动使用它,但如果必须将其转换为json,请使用json.dumps(data)。不要自己构造JSON字符串,始终使用json模块。 - Selcuk
1个回答

11
我个人会这样做:
import json
import datetime

today = datetime.date.today()
tomorrow = today + datetime.timedelta(days = 1)

data = [{
    "date": str(tomorrow),
    "price": {
        "amount": 15100
    }
}]

print(json.dumps(data))

当然,在这之后,你可以随意使用 json.dumps(data),在你的情况下,将它发送到请求中。


非常感谢,值已经正确传递,但是现在出现了语法错误的400错误? - locq
@locq 这似乎是特定于端点的。你能举个请求的例子,它不会出现语法错误吗? - BrownieInMotion
1
@locq 你可以尝试用字符串 data = '[{"date": "2020-11-10", "price": {"amount": 15100}}]' 吗? - BrownieInMotion
如果您的请求看起来像是response = requests.put('https://api.platform.io/calendar/28528204', headers=headers, data=json.dumps(data)),那么应该发送的就是这个确切的字符串。您是否忘记了json.dumps() - BrownieInMotion
对于任何迷失在这里的人,json.dumps(data)不能只是打印出来,它需要被存储然后发送。dumps是将其放回json格式,因为使用str()进行的编辑不会包括双引号。 - doublespaces
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接