json - 使用 python 将嵌套的 Json 转换为 CSV,每行具有唯一的第一列
问题描述
我看过很多 youtube 视频并查看了几个论坛,但是,我无法找到我的问题的答案,因为也许我的数据结构很奇怪,而且我是一个新手 python 用户,所以这对我来说会很复杂。
我有一个看起来像这样的“data.json”文件:
以前几行数据为例:
{
"570": {
"appid": 570,
"name": "Dota 2",
"developer": "Valve",
"publisher": "Valve",
"score_rank": 65,
"positive": 848043,
"negative": 136246,
"userscore": 86,
"owners": "100,000,000 .. 200,000,000",
"average_forever": 29576,
"average_2weeks": 1541,
"median_forever": 523,
"median_2weeks": 823,
"price": "0",
"initialprice": "0",
"discount": "0"
},
"578080": {
"appid": 578080,
"name": "PLAYERUNKNOWN'S BATTLEGROUNDS",
"developer": "PUBG Corporation",
"publisher": "PUBG Corporation",
"score_rank": 10,
"positive": 481531,
"negative": 468448,
"userscore": 49,
"owners": "50,000,000 .. 100,000,000",
"average_forever": 19962,
"average_2weeks": 762,
"median_forever": 10055,
"median_2weeks": 271,
"price": "2999",
"initialprice": "2999",
"discount": "0"
}
}
我已经尝试过这些事情(审查隐私的位置链接):
1.
import json, csv
infile = open("C:\Users\....\data.json", "r")
outfile = open("C:\Users\....\bar.csv", "w")
writer = csv.writer(outfile)
for row in json.loads(infile.read()):
writer.write(row)
import sys import pandas as pd from pandas import DataFrame import json data=r'C:\Users\....\data.json' print ("This is json data input", data) /* Reads and converts json to dict. def js_r(data): with open(data, encoding='utf-8') as f_in: return(json.load(f_in)) if __name__ == "__main__": my_dic_data = js_r(data) print("This is my dictionary", my_dic_data) keys= my_dic_data.keys() print ("The original dict keys",keys) /* You assign a new dictionary key- SO_users, and make dictionary comprehension = { your_key: old_dict[your_key] for `enter code here`your_key in your_keys } dict_you_want={'my_items':my_dic_data[0]for key in keys} print ("These are the keys to dict_you_want",dict_you_want.keys()) print ("This is the dictionary of SO_users", dict_you_want) df=pd.DataFrame(dict_you_want) print ("df:", df) /*When .apply(pd.Series) method on items column is applied, the dictionaries in items column will be used as column headings df2=df['my_items'].apply(pd.Series) print ("df2",df2) df3=pd.concat([df2.drop(['user'],axis=1),df2['user'].apply(pd.Series)],axis=1) /*df3=df2['user'].apply(pd.Series) print ("df3",df3)
以上链接均无效,它们会产生错误。我想做的是我想要:
打开数据.json
从 json 中读取以下列并将它们放入 data.csv(与 data.json 相同的位置):“appid”、“name”、“developer”、“publisher”、“score_rank”、“positive”、“negative”、 “userscore”、“owners”、“average_forever”、“average_2weeks”、“median_forever”、“median_2weeks”、“price”、“initialprice”、“discount”
排除第一列,它基本上是每一行的唯一标识符,并且所有上述子属性在每个唯一标识中重复。
你能指导我完成这个吗?
解决方案
你可以这样做:
import json, csv
data = json.load(open('data.json', 'r'))
with open('data.csv', 'w', newline='', encoding='utf-8') as csvfile:
fieldnames = [...] # whatever fields in whatever order you want
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for appid, appinfo in data.items():
writer.writerow(appinfo)
推荐阅读
- android - Android 中的 Handlers 和 Runnables 有什么用?
- sql - 顶尖。如何也输出 NULL 值?
- php - 从另一个mysql表中选择
- arrays - 如何使用公式“查找数组”
- rest - REST API PATCH - 更新对象中的特定值
- python - 使用python在循环内的csv中添加新列
- javascript - 隐藏标签文本而不隐藏复选框?
- kubernetes - 带有命令和参数的 POD 中的 kubernetes 时区
- python - Python - 缺少“client_id”。怎么解决?
- matlab - matlab函数中的char