我在将 json 转换为 CSV 时遇到问题。 我对 JSON 解析有点陌生。我想要的只是从 我的 JSON 是一些“漂亮”的 csv。这样我就可以获得可以读取的数据。
我正在努力
f = csv.writer(open('data.csv', 'w+', encoding='utf-8', newline=''))
for item in json_head:
f.writerow(item)
但是我在data.csv
中得到的只是
d,a,t,a
i,n,c,l,u,d,e,d
l,i,n,k,s
m,e,t,a
文档中的 Json 模板如下所示
{
"data": {
"type": "string",
"id": "string",
"attributes": {
"createdAt": "string",
"duration": 0,
"gameMode": "string",
"patchVersion": "string",
"shardId": "string",
"stats": {},
"tags": {},
"titleId": "string"
},
"relationships": {
"assets": {
"data": [
{
"type": "string",
"id": "string"
}
]
},
"rosters": {
"data": [
{
"type": "string",
"id": "string"
}
]
},
"rounds": {},
"spectators": {}
},
"links": {
"schema": "string",
"self": "string"
}
},
"included": [
null
],
"links": {
"first": "string",
"previous": "string",
"self": "string",
"next": "string"
},
"meta": {}
}
我通过 API 收到的部分真实 JSON 看起来像这样
{"data":
{"type":"match","id":"bdd8b91c-8866-47f1-b5ee-45de4163d3ad","attributes":{"createdAt":"2018-04-02T12:16:33Z","duration":1806,"gameMode":"squad-fpp","patchVersion":"","shardId":"pc-eu","stats":null,"tags":null,"titleId":"bluehole-pubg"},"relationships":{"assets":{"data":[{"type":"asset","id":"2609ba26-3674-11e8-b808-0a586466e20b"}]},
"rosters":{"data":[
{"type":"roster","id":"80a9215c-bed1-4c11-8ff7-e4c9d643befa"},
{"type":"roster","id":"1457bd01-80f9-45e3-b98f-aa9ea946f6b2"}]},
"rounds":{"data":[]},"spectators":{"data":[]}},"links":{"schema":"","self":"https://api.playbattlegrounds.com/shards/pc-eu/matches/bdd8b91c-8866-47f1-b5ee-45de4163d3ad"}},
"included":[
{"type":"participant","id":"f0d889c7-49e7-4c83-ac0b-d7f23d13e09f","attributes":{"actor":"","shardId":"pc-eu","stats":{"DBNOs":3,"assists":0,"boosts":2,"damageDealt":253.554047,"deathType":"byplayer","headshotKills":1,"heals":0,"killPlace":4,"killPoints":1182,"killPointsDelta":48.6543655,"killStreaks":0,"kills":4,"lastKillPoints":0,"lastWinPoints":0,"longestKill":5,"mostDamage":0,"name":"TheFieryArrow","playerId":"account.e951c5cf324d4153850fb411a13f4e8d","revives":0,"rideDistance":4288.21143,"roadKills":0,"teamKills":0,"timeSurvived":1215,"vehicleDestroys":0,"walkDistance":1508.55408,"weaponsAcquired":0,"winPlace":15,"winPoints":1113,"winPointsDelta":7.15782833}}},
{"type":"participant","id":"5c26da97-6733-49d4-8a56-5dc7513e3c77","attributes":{"actor":"","shardId":"pc-eu","stats":{"DBNOs":0,"assists":0,"boosts":0,"damageDealt":64.68,"deathType":"byplayer","headshotKills":0,"heals":0,"killPlace":93,"killPoints":1111,"killPointsDelta":-14.2245054,"killStreaks":0,"kills":0,"lastKillPoints":0,"lastWinPoints":0,"longestKill":0,"mostDamage":0,"name":"Ritter-Sport","playerId":"account.f704b21b861b4c649ec56a0d688171c8","revives":0,"rideDistance":0,"roadKills":0,"teamKills":0,"timeSurvived":142,"vehicleDestroys":0,"walkDistance":43.5367622,"weaponsAcquired":0,"winPlace":28,"winPoints":1220,"winPointsDelta":-19.1033173}}},
对于开始来说,如果有一种方法可以从特定元素获取数据就足够了,对我来说这些就是这些元素 "type":"participant"
我希望得到这样的表格数据
ID |DBNOs | assists | boosts | othercolumns from "stats"
f0d889c7-49e7-4c83-ac0b-d7f23d13e09f | 3 | 0 | 2 |
5c26da97-6733-49d4-8a56-5dc7513e3c77 | 0 | 0 | 0 |
我知道我可以硬编码一些代码来解析它,我只是在寻找每种可能性。
谢谢
最佳答案
当你这样做时
for item in json_head:
f.writerow(item)
它只读取 json 中的键,然后将其作为字符串传递给 writerow
方法,该方法将其视为可迭代的字符并将单个字符写入 csv。
相反,尝试这样做:
for item in json_head:
f.writerow([item, json_head[item])
关于Python JSON 到 CSV 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49639152/