Python3 Gerrit 请求获得响应 Json 以 )]} 开头

Python3 Gerrit Requests Get Reponse Json starts with )]}

我正在对 gerrit 服务器进行 REST 调用。非常直截了当我不明白响应查看来自 Chrome 的网络流量,Chrome 得到相同的响应。所以我猜我根本不明白如何解析响应。这是我的代码和一些响应:

import requests
from requests.auth import HTTPBasicAuth

url = 'https://my.gerrit.server.com/changes/?n=1&q=owner=me'

headers = { 'Content-Type': 'application/json', 'charset' : 'UTF-8'}
response = requests.get(url, verify=False, auth=HTTPBasicAuth('usernmae', 'password'), headers=headers)

如果我们打印 response.text,我们会得到:

')]}\'\n[\n  {\n    "id": "some_id, ... ,\n    "requirements": []\n  }\n]\n'

除了开头 )]}.

,其他看起来都有效 JSON

我该如何解析?

在将此值传递给 JSON 解析器之前,您必须去除前缀字符。

s[4:] if s.startswith(')]}\'') else s
>>> s = ')]}\'\n[\n  {\n    "id": "some_id",\n    "requirements": []\n  }\n]\n'
>>> json.loads(s[4:] if s.startswith(')]}\'') else s)
[{'id': 'some_id', 'requirements': []}]

来自 https://gerrit-review.googlesource.com/Documentation/rest-api.html#output

的 Gerrit 文档

To prevent against Cross Site Script Inclusion (XSSI) attacks, the JSON response body starts with a magic prefix line that must be stripped before feeding the rest of the response body to a JSON parser:

  )]}'
  [ ... valid JSON ... ]