我是Python新手并处理JSON。我正在尝试从我的数据库中获取一个字符串数组并将它们提供给API。我不知道为什么我得到丢失的数据错误。你们可以看看吗?
###########################################
rpt_cursor = rpt_conn.cursor()
sql="""SELECT `ContactID` AS 'ContactId' FROM
`BWG_reports`.`bounce_log_dummy`;"""
rpt_cursor.execute(sql)
row_headers=[x[0] for x in rpt_cursor.description] #this will extract row headers
row_values= rpt_cursor.fetchall()
json_data=[]
for result in row_values:
json_data.append(dict(zip(row_headers,result)))
results_to_load = json.dumps(json_data)
print(results_to_load) # Prints: [{"ContactId": 9}, {"ContactId": 274556}]
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
}
targetlist = '302'
# This is for their PUT to "add multiple contacts to lists".
api_request_url = 'https://api2.xyz.com/api/list/' + str(targetlist)
+'/contactid/Api_Key/' + bwg_apikey
print(api_request_url) #Prints https://api2.xyz.com/api/list/302/contactid/Api_Key/#####
response = requests.put(api_request_url, headers=headers, data=results_to_load)
print(response) #Prints <Response [200]>
print(response.content) #Prints b'{"status":"error","Message":"ContactId is Required."}'
rpt_conn.commit()
rpt_cursor.close()
###########################################################
编辑清晰度:
我正在传递 [{“ContactId”:9},{“ContactId”:274556}] 我收到此回复正文 b'{“状态”:“错误”,“消息”:“ContactId是必需的。”}'
API文档将此作为请求正文的后续内容。 的 [ { “ContactId”:“string” } ]
当我手动将这些数据放入测试时,我得到了我想要的东西。 [ { “ContactId”:“9” }, { “ContactId”:“274556” } ]
json.dumps vs json.load可能有问题吗?我不是在创建一个字典,而是一个看起来像字典的字符串?
编辑我想出来了!:
这是愚蠢的。
我需要在 results_to_load = json.dumps(json_data)加载之前将 results_to_load = [] 定义为dict。
感谢所有答案并尝试提供帮助。
答案 0 :(得分:0)
我建议你去检查API文档是否具体,但从中看来,API需要一个名为ContactID
的字段,它是一个数组,而不是每个对象的对象数组密钥为contactId
或者
//correct
{
contactId: [9,229]
}
而不是
// not correct
[{contactId:9}, {contactId:229}]
调整这可能会有所帮助:
res = {}
contacts = []
for result in row_values:
contacts.append(result)
res[contactId] = contacts
...
...
response = requests.put(api_request_url, headers=headers, data=res)
答案 1 :(得分:0)
我想出来了!:
这很愚蠢。
我需要将 results_to_load = [] 定义为空dict,然后才将其加载到 results_to_load = json.dumps(json_data)。
感谢所有答案并尝试提供帮助。