如何在python中将JSON文件转换为CSV文件?

时间:2017-10-27 01:18:25

标签: python json csv

我为大型JSON文件道歉。我希望能够创建一个csv文件,提取每个链接(在embedLink下),标签和排名。但是,我的每一次尝试都很短暂。这是我目前拥有的代码;但是,它会输出多个错误。

json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

import json, csv

x="""{u'results': [{u'index': 4367, u'content_data': {u'embedLink': 
u'http://media.giphy.com/media/MazO89pt5NljG/giphy.gif', u'tags': [u'dance', 
u'silly', u'carlton', u'banks', u'fresh prince'], u'added_with_admin': True, 
u'dateAdded': 1394519920.03, u'still_image': 
u'http://media.giphy.com/media/MazO89pt5NljG/200_s.gif'}, u'parameters': 
{u'mu': 38.367645789902205, u'sigma': 2.184739493694442}, u'cID': 
u'f10e5808d396e2e4ba0ab48c', u'rank': 0, u'content': u'MazO89pt5NljG', 
u'content_type': u'gif'}, {u'index': 370, u'content_data': {u'embedLink': 
u'http://media1.giphy.com/media/HscrwGNPHio2A/giphy.gif', u'tags': 
[u'excitedexcited', u'jeremy renner'], u'added_with_admin': False, 
u'dateAdded': 1393863494.644655, u'still_image': 
u'http://media.giphy.com/media/HscrwGNPHio2A/200_s.gif'}, u'parameters': 
{u'mu': 37.24778379219212, u'sigma': 1.5847716442668915}, u'cID': 
u'5314ab46d34b6c5b402aeb39', u'rank': 1, u'content': u'HscrwGNPHio2A', 
u'content_type': u'gif'}, {u'index': 287, u'content_data': {u'embedLink': 
u'http://media2.giphy.com/media/CCJnMBqEYxxEk/giphy.gif', u'tags': [u'tv', 
u'happy', u'30 rock', u'tina fey', u'high five', u'liz lemon', 
u'celebration'], u'added_with_admin': False, u'dateAdded': 
1393863490.821621, u'still_image': 
u'http://media.giphy.com/media/CCJnMBqEYxxEk/200_s.gif'}, u'parameters': 
{u'mu': 36.59521670234331, u'sigma': 1.681281739841269}, u'cID': 
u'5314ab42d34b6c5b402aeae6', u'rank': 2, u'content': u'CCJnMBqEYxxEk', 
u'content_type': u'gif'}, {u'index': 2681, u'content_data': {u'embedLink': 
u'http://media.giphy.com/media/Mn0C1r0qL7XWg/giphy.gif', u'tags': [u'funny', 
u'happy', u'excited', u'crazy'], u'added_with_admin': True, u'dateAdded': 
1394378341.692, u'still_image': u 
u'http://media.giphy.com/media/Mn0C1r0qL7XWg/200_s.gif'}, u'parameters': 
{u'mu': 36.56837392887614, u'sigma': 1.6136408794819588}, u'cID': 
u'3844637f65451dffd3698425', u'rank': 3, u'content': u'Mn0C1r0qL7XWg', 
u'content_type': u'gif'}, {u'index': 247, u'content_data': {u'embedLink': 
u'http://media.giphy.com/media/AAXjZcPFzTPO/giphy.gif', u'tags': [u'smile', 
u'happy', u'laughing', u'black', u'hipster', u'beautiful girls', u'be 
happy', u'pixie cut'], u'added_with_admin': False, u'dateAdded': 
1393863489.035277, u'still_image': 
u'http://media.giphy.com/media/AAXjZcPFzTPO/200_s.gif'}, u'parameters': 
{u'mu': 36.34056334299456, u'sigma': 1.7996651935876014}, u'cID': 
u'5314ab41d34b6c5b402aeabe', u'rank': 4, u'content': u'AAXjZcPFzTPO', 
u'content_type': u'gif'}, {u'index': 1429, u'content_data': {u'embedLink': 
u'http://media.giphy.com/media/7SQtrK5JbFTFK/giphy.gif', u'tags': 
[u'cartoons & comics', u'dancing', u'the simpsons', u'friday', u'lisa 
simpson', u'tgif'], u'added_with_admin': False, u'dateAdded': 
1394091573.355619, u'still_image': 
u'http://media.giphy.com/media/7SQtrK5JbFTFK/200_s.gif'}, u'parameters': 
{u'mu': 36.2797522468539, u'sigma': 1.3927800299100415}, u'cID': 
u'53182635d34b6c1910c00332', u'rank': 5, u'content': u'7SQtrK5JbFTFK', 
u'content_type': u'gif'}, {u'index': 2749, u'content_data': {u'embedLink': 
u'http://media2.giphy.com/media/wRGJgKQdpagFO/giphy.gif', u'tags': 
[u'dancing', u'happy', u'jimmy fallon', u'jimmy fallon'], 
u'added_with_admin': True, u'dateAdded': 1394386054.159, u'still_image': 
u'http://media.giphy.com/media/wRGJgKQdpagFO/200_s.gif'}, u'parameters': 
{u'mu': 36.14775637052213, u'sigma': 1.365824510294118}, u'cID': 
u'010e4981a9a97e6a007d8a65', u'rank': 6, u'content': u'wRGJgKQdpagFO', 
u'content_type': u'gif'}, {u'index': 12, u'content_data': {u'embedLink': u 
u'http://media.giphy.com/media/10UeedrT5MIfPG/giphy.gif', u'tags': 
[u'dancing', u'giphytrending', u'happy', u'cartoons', u'giphytv', u'tom and 
jerry'], u'added_with_admin': False, u'dateAdded': 1393863477.161998, 
u'still_image': u'http://media.giphy.com/media/10UeedrT5MIfPG/200_s.gif'}, 
u'parameters': {u'mu': 36.09150478133458, u'sigma': 1.4215081662482691}, 
u'cID': u'5314ab35d34b6c5b402ae9d3', u'rank': 7, u'content': 
u'10UeedrT5MIfPG', u'content_type': u'gif'}, {u'index': 1624, 
u'content_data': {u'embedLink': 
u'http://media.giphy.com/media/h8UyZ6FiT0ptC/giphy.gif', u'tags': 
[u'dancing', u'happy', u'birthday', u'fat', u't', u'giphybirthday', u'happy 
dance', u'taco bell', u'junk food', u'oh yea', u't card'], 
u'added_with_admin': False, u'dateAdded': 1394091596.424046, u'still_image': 
u'http://media.giphy.com/media/h8UyZ6FiT0ptC/200_s.gif'}, u'parameters': 
{u'mu': 35.96712787907767, u'sigma': 1.4742260856412648}, u'cID': 
u'5318264cd34b6c1910c003f5', u'rank': 8, u'content': u'h8UyZ6FiT0ptC', 
u'content_type': u'gif'}, {u'index': 193, u'content_data': {u'embedLink': 
u'http://media.giphy.com/media/6onMzNPjtFeCI/giphy.gif', u'tags': 
[u'laughing', u'excited', u'minions'], u'added_with_admin': False, 
u'dateAdded': 1393863486.381926, u'still_image': u 
u'http://media.giphy.com/media/6onMzNPjtFeCI/200_s.gif'}, u'parameters': 
{u'mu': 35.77139953100954, u'sigma': 1.3739202465218552}, u'cID': 
u'5314ab3ed34b6c5b402aea88', u'rank': 9, u'content': u'6onMzNPjtFeCI', 
u'content_type': u'gif'}], u'query_parameters': {u'sort': 1, u'skip': 0, 
u'limit': 10, u'mID': u'54a309ae1c61be23aba0da5c'}}
"""

x = json.loads(x)

f = csv.writer(open("test.csv", "w"))

f.writerow(["results", "index"])

for row in x:
   f.writerow( [row['results'], row['index']] )

示例所需输出:

0, dance, silly, carlton, banks, fresh prince, media.giphy.com/media/MazO89pt5NljG/giphy.gif
1, excitedexcited, jeremy renner, media1.giphy.com/media/HscrwGNPHio2A/giphy.gif
2, tv, happy, 30 rock, tina fey, high five, liz lemon, celebration, media2.giphy.com/media/CCJnMBqEYxxEk/giphy.gif 

我不确定我错过了什么,我一直在研究这个问题很长时间以来一直困扰着我。如果您对我的问题有任何可能的解决方案,请告诉我。我对所有想法持开放态度。

1 个答案:

答案 0 :(得分:1)

您可以首先在Dataframe中使用pandas并转换.json,然后再转换为.csv

import pandas as pd
df = pd.read_json('filename.json')
df.to_csv(filename.csv)