要列出的 JSON 数据

时间:2021-01-30 13:24:24

标签: python json

我正在尝试从 response>0>startXI>(0,1,2,3,4...)>player>nameresponse>1>startXI>(0,1,2,3,4...)>player>name 的 JSON 文件创建一个列表。我尝试了下面的代码,但出现错误。

代码:

with open("Files/lineups.json", 'r') as f:
    data = json.load(f)

home = []
away_lineup = []

for item in data:
    home.append(item['startXI']['name'])

print(home)

JSON 文件:

{
    "get":"fixtures\/lineups",
    "parameters":{
        "fixture":"599120"
    },
    "errors":[
        
    ],
    "results":2,
    "paging":{
        "current":1,
        "total":1
    },
    "response":[
        {
            "team":{
                "id":3573,
                "name":"Gazi\u015fehir Gaziantep",
                "logo":"https:\/\/media.api-sports.io\/football\/teams\/3573.png"
            },
            "formation":"5-4-1",
            "startXI":[
                { "player":{ "id":61950, "name":"G\u00fcnay G\u00fcven\u00e7", "number":1, "pos":"G" } },
                { "player":{ "id":61953, "name":"O\u011fuz Ceylan", "number":17, "pos":"D" } },
                { "player":{ "id":19695, "name":"Pawe\u0142 Olkowski", "number":16, "pos":"D" } },
                { "player":{ "id":21487, "name":"Papy Djilobodji", "number":3, "pos":"D" } },
                { "player":{ "id":2366, "name":"Alin To\u0219ca", "number":6, "pos":"D" } },
                { "player":{ "id":2151, "name":"G\u00fcray Vural", "number":11, "pos":"D" } },
                { "player":{ "id":30412, "name":"Kevin Mirallas", "number":27, "pos":"M" } },
                { "player":{ "id":61971, "name":"Jefferson", "number":8, "pos":"M" } },
                { "player":{ "id":109744, "name":"Amedej Vetrih", "number":74, "pos":"M" } },
                { "player":{ "id":25921, "name":"Alexandru Maxim", "number":44, "pos":"M" } },
                { "player":{ "id":19430, "name":"Nouha Dicko", "number":94, "pos":"F" } }
            ],
            "substitutes":[
                { "player":{ "id":61982, "name":"\u00c7a\u011flar \u015eahin Akbaba", "number":25, "pos":"G" } },
                { "player":{ "id":43016, "name":"J\u00fanior Morais", "number":13, "pos":"D" } },
                { "player":{ "id":62079, "name":"Ula\u015f Zengin", "number":4, "pos":"D" } },
                { "player":{ "id":163188, "name":"Mirza Cihan", "number":26, "pos":"M" } },
                { "player":{ "id":40587, "name":"Zvonimir Ko\u017eulj", "number":20, "pos":"M" } },
                { "player":{ "id":25219, "name":"Cenk \u015eahin", "number":77, "pos":"M" } },
                { "player":{ "id":46885, "name":"Andr\u00e9 Sousa", "number":28, "pos":"M" } },
                { "player":{ "id":41216, "name":"Osama Rashid", "number":32, "pos":"M" } },
                { "player":{ "id":50127, "name":"Bilal Ba\u015fa\u00e7\u0131ko\u011flu", "number":14, "pos":"F" } },
                { "player":{ "id":61972, "name":"Kenan \u00d6zer", "number":7, "pos":"M" } }
            ],
            "coach":{
                "id":2205,
                "name":"S\u00e1 Pinto"
            }
        },
        {
            "team":{
                "id":645,
                "name":"Galatasaray",
                "logo":"https:\/\/media.api-sports.io\/football\/teams\/645.png"
            },
            "formation":"4-3-3",
            "startXI":[
                { "player":{ "id":429, "name":"Fernando Muslera", "number":1, "pos":"G" } },
                { "player":{ "id":438, "name":"Martin Linnes", "number":14, "pos":"D" } },
                { "player":{ "id":446, "name":"Ryan Donk", "number":15, "pos":"D" } },
                { "player":{ "id":433, "name":"Marc\u00e3o", "number":45, "pos":"D" } },
                { "player":{ "id":1160, "name":"Marcelo Saracchi", "number":36, "pos":"D" } },
                { "player":{ "id":445, "name":"Youn\u00e8s Belhanda", "number":10, "pos":"M" } },
                { "player":{ "id":50202, "name":"Taylan Antalyal\u0131", "number":4, "pos":"M" } },
                { "player":{ "id":443, "name":"Emre Akbaba", "number":20, "pos":"M" } },
                { "player":{ "id":50091, "name":"Emre K\u0131l\u0131n\u00e7", "number":54, "pos":"F" } },
                { "player":{ "id":19034, "name":"Ryan Babel", "number":8, "pos":"F" } },
                { "player":{ "id":49859, "name":"Arda Turan", "number":66, "pos":"F" } }
            ],
            "substitutes":[
                { "player":{ "id":50217, "name":"Okan Kocuk", "number":34, "pos":"G" } },
                { "player":{ "id":439, "name":"Christian Luyindama", "number":27, "pos":"D" } },
                { "player":{ "id":67974, "name":"Valentine Ozornwafor", "number":49, "pos":"D" } },
                { "player":{ "id":456, "name":"Henry Onyekuru", "number":7, "pos":"F" } },
                { "player":{ "id":142959, "name":"Muhammed Kerem Akt\u00fcrko\u011flu", "number":18, "pos":"M" } },
                { "player":{ "id":2774, "name":"Oghenekaro Etebo", "number":13, "pos":"M" } },
                { "player":{ "id":431, "name":"\u00d6mer Bayram", "number":19, "pos":"D" } },
                { "player":{ "id":37440, "name":"Halil Dervi\u015fo\u011flu", "number":11, "pos":"F" } }
            ],
            "coach":{
                "id":1452,
                "name":"F. Terim"
            }
        }
    ]
}

错误:

TypeError: string indices must be integers

1 个答案:

答案 0 :(得分:1)

您正在查看字典中的错误键。名称在 data['response']['startXI']

中显示为列表

试试这个代码:

with open("Pdata.txt", 'r') as f:
    data = json.load(f)

home = []
for item in data['response']:
    for player in item['startXI']:
        home.append(player['player']['name'])

print(home)
相关问题