Python JSON 到 CSV 不起作用

标签 python json csv

我在将 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/

相关文章:

python - Django:如何在管理面板中检测对象请求?

java - Android 中向 WebService 发送请求

python - 如何使用python将csv数据推送到mongodb

csv - 检查 csv 文件是否从 vba 打开

c++ - 如何将列名设置为 csv 文件 - C++

python - 在 Microsoft Azure 上运行 python 脚本

python - 我可以用其他装置参数化 pytest 装置吗?

python - 使用 __getattr__ 防止调用不正确的方法

ios - 将 JSON 转换为自定义对象时出错

json - 如何在 AWS CloudFormation 中创建 Amazon SQS 队列并订阅 Amazon SNS 主题?