如何将 JSON 格式的输出转换为 CSV

How convert a JSON formatted output to a CSV

我正在通过其 API 访问 facebook 页面的数据,我已经设法获得了输出,但它是 JSON 格式,目的是将其转换为 CSV但是我没有成功。

import requests
import facebook
import urllib3
import csv
import json
import pandas as pd

token= 'EAAHAW2Bvoa8BAKgbnLe6r5ZAASjgIPbRl683UmcjQuBTwlSCJNJsVWPxmNSk013jcYVivSemjTivuRaEIxD918CuhSsIM7ZCCmDqKiHNi80ndSTy3oXZCklk3f4U9jIQGf20HOZBBqJtnyiWXGdZAQ6tq3mpaRNEmDMe47t4ERTLfPd1ja1yqWA67ZC6ZB0xylGjnStckbNudMaKT3w2Ub6'

graph = facebook.GraphAPI(access_token=token)
events = graph.request('/2063741620561889/insights?metric=page_fans%2Cpage_actions_post_reactions_like_total%2Cpage_actions_post_reactions_love_total%2Cpage_actions_post_reactions_wow_total%2Cpage_actions_post_reactions_haha_total%2Cpage_actions_post_reactions_sorry_total%2Cpage_actions_post_reactions_anger_total%2Cpage_video_views%2Cpage_video_views_organic%2Cpage_posts_impressions%2Cpage_impressions%2Cpost_clicks%2Cpage_views_total&period=day&date_preset=last_year')

结果

我希望能够获得该类型的任何结果并将其转换为 CSV。我尝试了以下但没有成功:

info = json.dumps(events)
print(info[0].keys())
with open("samplecsv.csv", 'w') as f: 
    wr = csv.DictWriter(f, fieldnames = info[0].keys()) 
    wr.writeheader() 
    wr.writerows(info)

当您的数据结构不如您的情况时,可以通过分析 json 并遍历它来获得您需要的数据。在四种特定情况下,它可能是这样的:

data = [(x["value"],x["end_time"]) for x in  info["data"][0]["values"]]

你可以在元组列表中检索必要的信息以保存在 csv 文件中,就像你在做的那样,但没有必要自己制作那个文件,你可以使用一个库来为你做这件事,例如构建一个 pandas 数据框:

import pandas as pd
df = pd.DataFrame(data=data, columns=[info["data"][0]["name"], info["data"][0]["period"]])
df.to_csv(your_path)

还有其他库以自动方式创建此结构,但并不总是按您的预期工作。这是我能想到的最简单的方法,可以修改为其他数据。