簡體   English   中英

如何遍歷Python中的JSON對象並保存到CSV文件?

[英]How to iterate through JSON objects in Python and save to a CSV file?

我有Python腳本,它以JSON格式(至少我認為其JSON格式)從API檢索數據。 我想遍歷每個“對象”並寫入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文件? 我當前嘗試遍歷它的過程導致腳本遍歷每個字母。

感謝幫助。

PS我正在使用python 2.7

要將其轉換為適當的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”包含在標准庫中。

import json
import csv
temp = json.load(open('filename.json','r'))
output =[]
for each in temp:
     row = {}
     row['field1'] =each['field1']
     row['field2'] = each['field2']
     output.append(row)
file = open( "filename_destination.csv", "w")

fileWriter = csv.writer(file , delimiter=",",quotechar='"', quoting=csv.QUOTE_MINIMAL)

Header = ['field1','field2']

fileWriter.writerow(Header)

for x in output:
te = [x['field1'],x['field2']]
fileWriter.writerow(te)
file.close()

嘗試使用simplejson將JSON字符串轉換為本地Python對象。 然后,您應該能夠使用標准的for循環遍歷對象。

http://pypi.python.org/pypi/simplejson/

data = simplejson.loads(JSON_STRING)

可以做到這一點:

import json
for i in json.loads(json_string):
    print ','.join(i)

請參閱json模塊文檔

您應該使用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列表。

最后,我為請求返回了一個略有不同的URL,該URL返回了原始CSV。 我將內容轉儲到CSV文件中:

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

這不是理想的解決方案,因為我仍然無法遍歷CSV對象(遍歷每個字符),但是我能夠創建格式合理的csv文件,因此現在還可以。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM