如何将 python-request JSON 结果转换为 csv?

How to convert python-request JSON results to csv?

我正在尝试使用他们的 API 端点 url 和 python 中的请求模块从我的 WIX 网站获取我的联系人列表。我完全被困住了。 到目前为止,这是我的代码:

import requests

auth_key = "my auth key"
r = requests.get("https://www.wixapis.com/crm/v1/contacts", headers={"Authorization": auth_key})
print(r.status_code)
dict = r.json()
contacts_list = dict["contacts"]

for i in contacts_list:
    for key in i:
        print(key, ':', i[key])

这是我得到的:

200
id : long id string 1
emails : [{'tag': 'UNTAGGED', 'email': 'sampleemail1@yahoo.com'}]
phones : []
addresses : [{'tag': 'UNTAGGED', 'countryCode': 'US'}]
metadata : {'createdAt': '2020-07-08T22:41:07.135Z', 'updatedAt': '2020-07-08T22:42:19.327Z'}
source : {'sourceType': 'SITE_MEMBERS'}
id : long id string 2
emails : [{'tag': 'UNTAGGED', 'email': 'sampleemail2@yahoo.com'}]
phones : []
addresses : []
metadata : {'createdAt': '2020-07-03T00:51:21.127Z', 'updatedAt': '2020-07-04T03:26:16.370Z'}
source : {'sourceType': 'SITE_MEMBERS'}

Process finished with exit code 0

每一行都是一个字符串。我需要 csv 的每一行都是一个新联系人(有两个示例联系人)。列应该是键。我打算使用 csv 模块来 writerow(Fields),其中字段是字符串(键)列表,例如 Fields = [id, emails, phones, addresses, metadata, source]

不过,我真正需要的只是 csv 单列中的电子邮件。有没有办法只获取每个联系人的电子邮件?

更新: 正如@martineau 所指出的,我刚刚看到您可以排列几个值,您需要满足它。您可以在 for 循环

中使用 [].join() 将它们设为字符串

您可以使用 csv 包将其写入 csv。

import csv, json, sys

auth_key = "my auth key"
r = requests.get("https://www.wixapis.com/crm/v1/contacts", headers={"Authorization": auth_key})
print(r.status_code)
dict = r.json()
contacts_list = dict["contacts"]
output = csv.writer(sys.stdout)
#insert header(keys)
output.writerow(data[0].keys()) 

for i in contacts_list:
      output.writerow(i.values())

最后可以打印验证output

具有一列的 CSV 文件基本上只是一个文本文件,每行一个项目,但是您可以使用 csv 模块来完成它,如果您真的想要,如下图。

我注释掉了 'python-requests' 内容并使用了一些样本输入进行测试。

test_data = {
    "contacts": [
        {
            "id": "long id string 1",
            "emails": [
                {
                    "tag": "UNTAGGED",
                    "email": "sampleemail1@yahoo.com"
                }
            ],
            "phones": [],
            "addresses": [
                {
                    "tag": "UNTAGGED",
                    "countryCode": "US"
                }
            ],
            "metadata": {
                "createdAt": "2020-07-08T22:41:07.135Z",
                "updatedAt": "2020-07-08T22:42:19.327Z"
            },
            "source": {
                "sourceType": "SITE_MEMBERS"
            }
        },
        {
            "id": "long id string 2",
            "emails": [
                {
                    "tag": "UNTAGGED",
                    "email": "sampleemail2@yahoo.com"
                }
            ],
            "phones": [],
            "addresses": [],
            "metadata": {
                "createdAt": "2020-07-03T00:51:21.127Z",
                "updatedAt": "2020-07-04T03:26:16.370Z"
            },
            "source": {
                "sourceType": "SITE_MEMBERS"
            }
        }
    ]
}


import csv
import json
import requests


auth_key = "my auth key"
output_filename = 'whatever.csv'

#r = requests.get("https://www.wixapis.com/crm/v1/contacts", headers={"Authorization": auth_key})
#print(r.status_code)
#json_obj = r.json()

json_obj = test_data  # FOR TESTING PURPOSES
contacts_list = json_obj["contacts"]

with open(output_filename, 'w', newline='') as outp:
    writer = csv.writer(outp)
    writer.writerow(['email'])  # Write csv header.

    for contact in contacts_list:
        email = contact['emails'][0]['email']  # Get the first one.
        writer.writerow([email])

print('email csv file written')

之后 whatever.csv 文件的内容:

email
sampleemail1@yahoo.com
sampleemail2@yahoo.com