0

I am trying to create a list from JSON file which are response>0>startXI>(0,1,2,3,4...)>player>name and response>1>startXI>(0,1,2,3,4...)>player>name. I tried the code below but am getting an error.

Code:

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 file:

{
    "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"
            }
        }
    ]
}

Error:

TypeError: string indices must be integers
2
  • Perhaps you meant: home.append(item['startXI'][0]['name'])? Commented Jan 30, 2021 at 13:29
  • 1
    @quamrana Perhaps you meant: home.append(item['startXI'][0]['player']['name'])? Commented Jan 30, 2021 at 13:37

1 Answer 1

1

You are looking at the incorrect key in the dictionary. The names are present as a list in data['response']['startXI']

Try this code:

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)
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.