如何在Python中遍历JSON对象并保存为CSV文件?

0 投票
6 回答
13525 浏览
提问于 2025-04-17 01:54

我有一个Python脚本,它从一个API获取数据,数据格式是JSON(至少我认为是JSON格式)。我想要遍历每一个“对象”,然后把它们写入一个CSV文件。

这是从API返回的数据:

[
{
    "bids_won": "7",
    "partner_revenue": "$0.01",
    "profit": "$0.00",
    "campaign_id": "test 1", 
    "post_click_conversions": "0", 
    "total_cost": "$0.01",
    "total_media_cost": "$0.01",
    "post_view_conversions": "2", 
    "adjusted_partner_cost": "$0.01", 
    "clicks": "0",
    "day": "August 21, 2011"
},
{
    "bids_won": "30,209", 
    "partner_revenue": "$38.67", 
    "profit": "$8.92", 
    "campaign_id": "test 2", 
    "post_click_conversions": "0", 
    "total_cost": "$29.75", 
    "total_media_cost": "$29.75", 
    "post_view_conversions": "0", 
    "adjusted_partner_cost  ": "$25.26", 
    "clicks": "10", 
    "day": "August 21, 2011"
}
 ]

我该如何遍历这些“对象”,并把它们写入CSV文件呢?我现在的尝试是遍历它,但结果是脚本一个字母一个字母地遍历……

感谢大家的帮助。

另外,我使用的是Python 2.7。

6 个回答

0

你应该使用 simplejsonhttp://pypi.python.org/pypi/simplejson/

使用 simplejson,你可以很简单地做到:

import simplejson as json

info = """[
{
    "bids_won": "7",
    "partner_revenue": "$0.01",
    "profit": "$0.00",
    "campaign_id": "test 1", 
    "post_click_conversions": "0", 
    "total_cost": "$0.01",
    "total_media_cost": "$0.01",
    "post_view_conversions": "2", 
    "adjusted_partner_cost": "$0.01", 
    "clicks": "0",
    "day": "August 21, 2011"
},
{
    "bids_won": "30,209", 
    "partner_revenue": "$38.67", 
    "profit": "$8.92", 
    "campaign_id": "test 2", 
    "post_click_conversions": "0", 
    "total_cost": "$29.75", 
    "total_media_cost": "$29.75", 
    "post_view_conversions": "0", 
    "adjusted_partner_cost  ": "$25.26", 
    "clicks": "10", 
    "day": "August 21, 2011"
}
 ]"""

data = json.loads(info)

这样 data 就会变成一个可以循环遍历的 Python 列表。

4

要把这个转换成一个合适的csv文件,也就是把键作为表头,下面的代码应该可以做到,"data"是包含你json数据的字符串:

import json
from csv import DictWriter
dicts = json.loads(data)
the_file = open("sample.csv", "w")
writer = DictWriter(the_file, dicts[0].keys())
writer.writeheader()
writer.writerows(dicts)
the_file.close()

需要注意的是,从Python 2.6开始,simplejson已经被包含在标准库中,叫做"json"。

-1

最后,我得到了一个稍微不同的请求网址,这个网址返回了原始的CSV文件。我把内容放进了一个CSV文件里:

f = open('report.csv', 'wb')
f.write(response_content)
f.close

这并不是一个理想的解决方案,因为我还是无法像循环处理其他对象那样处理CSV里的内容(只能一个一个字符地处理),不过我能创建一个格式还不错的CSV文件,所以现在这样也还行。

撰写回答