在可序列化JSON的Python对象中传递整数值
我刚开始学习Python,最近遇到了一些问题。这里有一个用Python写的AWS Lambda函数,它会调用一个REST接口,代码是这样的:
requests.post(Url,headers=Headers,data=Payload)
在这个调用中,Payload是这样传递的:
Payload='[{"Code": "'+someCode+'","version": "v1","itemNumber": 1,"referenceId": "'+referenceId+'","alertBody": {"customerId": "'+customerId+'"},"Context":{"Id":"'+str(payload['body']['State']['Id'])+'","Name":"Payment","Expiration":0,"Action":"","sourceTimestamp":"'+ str(int(currentTime.timestamp()))+'","sourceApp":"someApp"}}]'
不过,由于最近API那边的格式发生了变化,导致这个功能不再正常工作。现在API希望接收到的"sourceTimestamp":"'+ str(int(currentTime.timestamp()))+'"字段是一个整数,而不是字符串(目前它是以字符串的形式发送的,如上面的Payload所示)。
有没有人能帮我一下,告诉我怎么把时间戳字段发送为整数而不是字符串?我想保持上面的Payload格式不变。
2 个回答
从一个Python对象生成数据会更少出错。简单来说,就是不要把数据当作字符串放进结构里。
import datetime as dt
# Fake data to make a working example
someCode = 'ABC'
referenceId = 'REF'
customerId = 'A123'
payload = {'body':{'State':{'Id':456}}}
currentTime = dt.datetime.now()
payload['body']['State']['Id']
Payload = json.dumps([
{
"Code": someCode,
"version": "v1",
"itemNumber": 1,
"referenceId": referenceId,
"alertBody": {
"customerId": "A123"
},
"Context": {
"Id": str(payload['body']['State']['Id']),
"Name": "Payment",
"Expiration": 0,
"Action": "",
"sourceTimestamp": int(currentTime.timestamp()), # don't wrap in str() and won't be quoted
"sourceApp": "someApp"
}
}
])
print(Payload)
输出结果:
[{"Code": "ABC", "version": "v1", "itemNumber": 1, "referenceId": "REF", "alertBody": {"customerId": "A123"}, "Context": {"Id": "456", "Name": "Payment", "Expiration": 0, "Action": "", "sourceTimestamp": 1711733124, "sourceApp": "someApp"}}]
在Json中,整数不能用双引号包起来。所以你只需要把 str(int(currentTime.timestamp()))
周围的双引号去掉就可以了。