在 Python 3.6 中解码来自 API 的文本响应

Decode text response from API in Python 3.6

我正在尝试从 mailchimp 导出 api 中提取数据,returns 响应基于以下规范:

    Returns:

参数-文本

说明: JSON object 的纯文本转储。第一行是 header 行。返回的每一行都是一个单独的 JSON object。行使用换行符 (\n) 分隔,因此实现可以一次读取一行,处理它,然后继续。

获取我正在使用的数据:

response = requests.get(urldetails).text

如果我使用 .json() 它会出现 JSON 解码错误。上面的输出是这样的:

{数据..} {数据...}

我不确定每个 dict 是否在单独的一行中,但我的印象是它实际上只是一个连续的字符串,因为我尝试对其进行解码的许多尝试都以错误告终 'str' object 不能是...等等。 .当我使用 .text 方法时,我在任何地方都看不到 '\n' 分隔符。

让每个字典成为列表中的单独项目或数据框中的一行的最佳方法是什么(我可以稍后解压)。

谢谢

只要文本响应的格式不是非常糟糕 json,您就可以使用 json library。特别是 loads() 函数。

import json
json_response = json.loads(response)

loads() 从字符串中将 JSON 加载到 python 字典中。

编辑: Mailchimp API 声明每个 JSON 对象由换行符分隔。我们可以使用以下代码创建字典列表:

# get response from GET request and load as a string
import json
json_resp = [json.loads(line) for line in response.split('\n')]

您可以使用一种简单的方法从 MailChimp export api 中获取所有数据。请注意,我使用的是 f-strings,仅适用于 Python 3.6+。

import requests
import json


apikey = '<your-api-key>'
id = "<list-id>"

URL = f"https://us10.api.mailchimp.com/export/1.0/campaignSubscriberActivity/?apikey={apikey}&id={id}"

json_data = [json.loads(s) for s in requests.get(URL).text.strip().split("\n")]
print(json_data[0]['<some-subscriber-email>'][0]['action'])