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

时间:2018-04-11 10:18:44

标签: python json python-3.x mailchimp-api-v3.0

我正在尝试从mailchimp export api中提取数据,该数据会根据以下规范返回响应:

    Returns:

参数 - 文字

描述: JSON对象的纯文本转储。第一行是标题行。返回的每个附加行都是单独的JSON对象。行使用换行符(\ n)标记分隔,因此实现可以一次读取一行,处理它,然后继续。

获取我正在使用的数据:

response = requests.get(urldetails).text

如果我使用.json(),则会出现JSON解码错误。以上的输出类似于:

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

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

最好的方法是将每个dict作为列表中的单独项目或数据框中的一行(以后我可以解压缩)。

由于

2 个答案:

答案 0 :(得分:1)

您可以使用简单方法从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'])

答案 1 :(得分:0)

如果文本响应不是非常糟糕地形成json,您可以使用json library。特别是,load()函数。

import json
json_response = json.loads(response)

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

修改 Mailchimp API声明每个JSON对象由换行符分隔。我们可以使用以下代码创建一个dicts列表:

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