use*_*231 0 python json python-requests
我试图从输入文件中读取json数据,并将其作为在python中进行http调用的请求进行传递。
这是我的python代码中的重点:
with open('input.json') as f:
raw_data = json.load(f)
cookies = ...
headers = {
'Content-Type': 'application/json;charset=UTF-8',
'Accept': 'application/json text/plain, */*',
...
}
response = requests.put('https://.../template/...02420afe4907', headers=headers, cookies=cookies, data=raw_data)
Run Code Online (Sandbox Code Playgroud)
但由于400错误而失败。响应内容显示:
b'<!DOCTYPE html>\n<html lang="en">\n<head>\n<meta charset="utf-8">\n<title>Error</title>\n</head>\n<body>\n<pre>SyntaxError: Unexpected token # in JSON at position 0<br>
Run Code Online (Sandbox Code Playgroud)
但是,如果我直接对其进行初始化,例如:
raw_data = '{"name":"template-123","comment":"",...}'
Run Code Online (Sandbox Code Playgroud)
可以成功拨打电话。
这是我的input.json看起来像:
{
"name":"template-123",
"comment":"",
...
}
Run Code Online (Sandbox Code Playgroud)
有谁知道如何解决这一问题。我需要从该文件中获取原始数据。谢谢。
当您将dict(即是raw_data)作为data参数传递给时requests.put,它将进行形式编码,但不能生成有效的JSON。将序列化的JSON传递给data:
requests.put(..., data=json.dumps(raw_data), ...)
Run Code Online (Sandbox Code Playgroud)
或使用json关键字requests为您进行序列化:
requests.put(..., json=raw_data, ...)
Run Code Online (Sandbox Code Playgroud)