Python - JSON到CSV表?

时间:2014-07-14 04:17:25

标签: python json csv

我想知道如何导入JSON文件,然后将其保存到有序的CSV文件中,标题行和下面的适用数据。

这里是JSON文件的样子:

 [
  {
    "firstName": "Nicolas Alexis Julio",
    "lastName": "N'Koulou N'Doubena",
    "nickname": "N. N'Koulou",
    "nationality": "Cameroon",
    "age": 24
  },
  {
    "firstName": "Alexandre Dimitri",
    "lastName": "Song-Billong",
    "nickname": "A. Song",
    "nationality": "Cameroon",
    "age": 26,
    etc. etc. + } ]

注意有多个键' (firstName,lastName,昵称等)。我想创建一个CSV文件,将其作为标题,然后是行中的适用信息,每行都有播放器的信息。

这是我到目前为止Python的脚本:

import urllib2
import json
import csv

writefilerows = csv.writer(open('WCData_Rows.csv',"wb+"))


api_key = "xxxx"
url = "http://worldcup.kimonolabs.com/api/players?apikey=" + api_key + "&limit=1000"
json_obj = urllib2.urlopen(url)
readable_json = json.load(json_obj)
list_of_attributes = readable_json[0].keys()

print list_of_attributes


writefilerows.writerow(list_of_attributes)

for x in readable_json:
    writefilerows.writerow(x[list_of_attributes])

但是当我运行它时,我得到一个" TypeError:不可用的类型:' list'"错误。我还在学习Python(显然我认为)。我在网上浏览过(发现this)并且似乎无法明确说明如何在没有明确说明要打印的密钥的情况下...我不想要列出每一个人......

感谢您的任何帮助/想法!如果我能澄清或提供更多信息,请告诉我。

2 个答案:

答案 0 :(得分:1)

也许pandas可以做到这一点 - 但我新尝试阅读JSON

import pandas as pd

df = pd.read_json( ... )

df.to_csv( ... )

pandas.DataFrame.to_csv

pandas.io.json.read_json


修改

data = ''' [
  {
    "firstName": "Nicolas Alexis Julio",
    "lastName": "N'Koulou N'Doubena",
    "nickname": "N. N'Koulou",
    "nationality": "Cameroon",
    "age": 24
  },
  {
    "firstName": "Alexandre Dimitri",
    "lastName": "Song-Billong",
    "nickname": "A. Song",
    "nationality": "Cameroon",
    "age": 26,
  }
]'''

import pandas as pd

df = pd.read_json(data)

print df

df.to_csv('results.csv')

结果:

   age             firstName            lastName nationality     nickname
0   24  Nicolas Alexis Julio  N'Koulou N'Doubena    Cameroon  N. N'Koulou
1   26     Alexandre Dimitri        Song-Billong    Cameroon      A. Song

使用pandas,您可以将其保存在csvexcel等中(甚至可以直接保存在数据库中)。

你可以对表格中的数据进行一些操作并将其显示为图形。

答案 1 :(得分:1)

您的TypeError正在发生,因为您尝试将字典x编入索引,list_of_attributesx[list_of_attributes]。这不是python的工作原理。在这种情况下,您正在迭代readable_json,它会在每次迭代时返回一个字典。为了将它们写出来,不需要从这些数据中提取拉出值。

DictWriter应该可以满足您的需求。

import csv
[...]

def encode_dict(d, out_encoding="utf8"):    
    '''Encode dictionary to desired encoding, assumes incoming data in unicode'''
    encoded_d = {}
    for k, v in d.iteritems():
        k = k.encode(out_encoding)
        v = unicode(v).encode(out_encoding)        
        encoded_d[k] = v
    return encoded_d

list_of_attributes = readable_json[0].keys()
# sort fields in desired order
list_of_attributes.sort()

with open('WCData_Rows.csv',"wb+") as csv_out:
    writer = csv.DictWriter(csv_out, fieldnames=list_of_attributes)
    writer.writeheader()
    for data in readable_json:
        writer.writerow(encode_dict(data))

注意:的     这假定readable_json中的每个条目都具有相同的字段。