在python中发出http请求时出现“ SyntaxError:JSON在位置0处出现意外令牌#”

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)

有谁知道如何解决这一问题。我需要从该文件中获取原始数据。谢谢。

jwo*_*der 5

当您将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)