使用Python问题将JSON转换为CSV

时间:2013-07-10 18:50:23

标签: python json csv indices

我正在尝试将JSON文件有选择地转换为CSV。这意味着我想迭代JSON。

编写我的CSV的代码如下所示:

f = csv.writer(open("test.csv", "wb+"))
f.writerow(["id", "text", "polarity"])
for x in final:
    f.writerow([x["id"], 
                x["text"], 
                x["polarity"]])

可悲的是,我收到以下错误:

TypeError: string indices must be integers

我已经知道问题是什么了。我加载后检查了我的JSON类型。这是一个字典,所以应该没问题。

当我打印我的字典时:

print (final)

我明白了:

{u'data': [{u'polarity': 2, u'text': u'How deep is your love - Micheal Buble Ft Kelly Rowland ?', u'meta': {u'language': u'en'}, u'id': u'1'}, {u'polarity': 2, u'text': u'RT @TrueTeenQuotes: #SongsThatNeverGetOld Nelly ft. Kelly Rowland - Dilemma', u'meta': {u'language': u'en'}, u'id': u'2'}, {u'polarity': 2, u'text': u'RT @GOforCARL: Dilemma - Nelly Feat. Kelly Rowland #Ohh #SongsThatNeverGetOld', u'meta': {u'language': u'en'}, u'id': u'3'}, {u'polarity': 2, u'text': u'#NP Kelly Rowland Grown Woman', u'meta': {u'language': u'en'}, u'id': u'4'}, {u'polarity': 2, u'text': u"My friend just said 'kelly rowland is gettin it good... Most of her songs are sexual'", u'meta': {u'language': u'en'}, u'id': u'5'}, {u'polarity': 2, u'text': u'No. Kelly Rowland is the Black Barbie, idc', u'meta': {u'language': u'en'}, u'id': u'6'}, {u'polarity': 2, u'text': u'Nelly - Gone ft. Kelly Rowland http://t.co/tXjhCS05l0', u'meta': {u'language': u'en'}, u'id': u'7'}, {u'polarity': 2, u'text': u'Kisses Down Low by Kelly Rowland killer?\u2018?\u2018?\u2018 #NellyVille', u'meta': {u'language': u'en'}, u'id': u'8'}]}

除了'极性'的值之外,每个项目似乎都是Unicode。我现在有3个问题。 1.所有物品是否应该是unicode?如何更改dict中的格式?这会解决我的问题吗?

1 个答案:

答案 0 :(得分:1)

迭代Python中的字典会将字典的键作为字符串 - 因此上例中的x将只包含字符串"data"

如果要迭代与u"data" dict的final键关联的列表值中的dicts,则必须在Python中编写:

...
for x in final[u"data"]:
    f.writerow([x["id"], 
                x["text"], 
                x["polarity"]])