我在使用python将JSON转换为CSV时遇到问题
问题描述:
我有这个JSON文件,我试图将其转换为CSV来收集数据。但是,我得到的结果远不是正确的。我在使用python将JSON转换为CSV时遇到问题
到目前为止,我有:
import csv
import json
infile = open("top40nl.json", "r")
outfile = open("top40nl.csv", "w")
writer = csv.writer(outfile)
for row in json.loads(infile.read()):
writer.writerow(row)
使用这种类型的JSON数据(例如):
{
"info": "SQLite Pro Result Set",
"data": [
{
"top40_SK": "118899",
"song_title": "Sorry",
"artist": "Justin Bieber",
"year_released": "2015",
"year": "2016",
"week": "1",
"position": "1",
"prev_position": "1",
"weeks_in_top40_v1": "10",
"weeks_in_top40_v2": "10",
"highest_reached_position": "1",
"total_points": "775",
"top40url": "https://www.top40.nl/top40/2016/week-1"
},
{
"top40_SK": "118900",
"song_title": "Love yourself",
"artist": "Justin Bieber",
"year_released": "2015",
"year": "2016",
"week": "1",
"position": "2",
"prev_position": "2",
"weeks_in_top40_v1": "6",
"weeks_in_top40_v2": "6",
"highest_reached_position": "1",
"total_points": "764",
"top40url": "https://www.top40.nl/top40/2016/week-1"
}
]
}
以上所有的工作,到目前为止,但是这是我的输出: i,n,f,o
d,a,t,a
任何想法如何解决这个问题?
答
我不明白你为什么要一个CSV文件,而不是JSON那张最简单的一个,但这里是如何从每个数据提取http://stardict.sourceforge.net/Dictionaries.php下载列出并将它们写入CSV。为了保持示例简单,我只是将输出写入sys.stdout
而不是写入磁盘文件。
import json
import csv
import sys
JSON = '''\
{
"info": "SQLite Pro Result Set",
"data": [
{
"top40_SK": "118899",
"song_title": "Sorry",
"artist": "Justin Bieber",
"year_released": "2015",
"year": "2016",
"week": "1",
"position": "1",
"prev_position": "1",
"weeks_in_top40_v1": "10",
"weeks_in_top40_v2": "10",
"highest_reached_position": "1",
"total_points": "775",
"top40url": "https://www.top40.nl/top40/2016/week-1"
},
{
"top40_SK": "118900",
"song_title": "Love yourself",
"artist": "Justin Bieber",
"year_released": "2015",
"year": "2016",
"week": "1",
"position": "2",
"prev_position": "2",
"weeks_in_top40_v1": "6",
"weeks_in_top40_v2": "6",
"highest_reached_position": "1",
"total_points": "764",
"top40url": "https://www.top40.nl/top40/2016/week-1"
}
]
}
'''
data = json.loads(JSON)
keys = data["data"][0].keys()
writer = csv.DictWriter(sys.stdout, fieldnames=keys)
writer.writerow(dict(zip(keys, keys)))
for d in data["data"]:
writer.writerow(d)
输出
top40_SK,song_title,artist,year_released,year,week,position,prev_position,weeks_in_top40_v1,weeks_in_top40_v2,highest_reached_position,total_points,top40url
118899,Sorry,Justin Bieber,2015,2016,1,1,1,10,10,1,775,https://www.top40.nl/top40/2016/week-1
118900,Love yourself,Justin Bieber,2015,2016,1,2,2,6,6,1,764,https://www.top40.nl/top40/2016/week-1
答
这里使用熊猫库
import pandas as pd
import json
with open('top40nl.json') as fi:
data = json.load(fi)
df = pd.DataFrame(data=data)
df.to_csv('top40nl.csv', index=False)
欢迎SO。请花时间阅读[问]。你应该花一些时间在[教程](https://docs.python.org/3/tutorial/index.html)上练习,练习例子。它将为您介绍Python所提供的工具,并且您甚至可以开始获得解决问题的方法。 ...看起来像在迭代字符串的字符。 – wwii
为什么你需要转换为CSV?为什么只需加载JSON数据并访问? –