Извлечение данных из файла json в CSV - PullRequest
0 голосов
/ 22 февраля 2020

Я новичок в работе с json файлами и надеюсь на некоторую помощь. Вот часть файла json (поскольку было бы слишком много для меня, чтобы опубликовать все это), с которым я имею дело

[{"id":804,"name":{"english":"Naganadel","japanese":"\u30a2\u30fc\u30b4\u30e8\u30f3"},"type":["Poison","Dragon"],"base":{"HP":73,"Attack":73,"Defense":73,"Sp. Attack":127,"Sp. Defense":73,"Speed":121}},{"id":805,"name":{"english":"Stakataka","japanese":"\u30c4\u30f3\u30c7\u30c4\u30f3\u30c7"},"type":["Rock","Steel"],"base":{"HP":61,"Attack":131,"Defense":211,"Sp. Attack":53,"Sp. Defense":101,"Speed":13}},{"id":806,"name":{"english":"Blacephalon","japanese":"\u30ba\u30ac\u30c9\u30fc\u30f3"},"type":["Fire","Ghost"],"base":{"HP":53,"Attack":127,"Defense":53,"Sp. Attack":151,"Sp. Defense":79,"Speed":107}},{"id":807,"name":{"english":"Zeraora","japanese":"\u30bc\u30e9\u30aa\u30e9"},"type":["Electric"],"base":{"HP":88,"Attack":112,"Defense":75,"Sp. Attack":102,"Sp. Defense":80,"Speed":143}},{"id":808,"name":{"english":"Meltan","japanese":"\u30e1\u30eb\u30bf\u30f3"},"type":["Steel"],"base":{"HP":46,"Attack":65,"Defense":65,"Sp. Attack":55,"Sp. Defense":35,"Speed":34}},{"id":809,"name":{"english":"Melmetal","japanese":"\u30e1\u30eb\u30e1\u30bf\u30eb"},"type":["Steel"],"base":{"HP":135,"Attack":143,"Defense":143,"Sp. Attack":80,"Sp. Defense":65,"Speed":34}}]

Я пытаюсь взять идентификатор, имя, тип , база, hp, атака, защита и скорость каждого покемона. Я приложил то, что у меня есть, в том числе мои попытки взять идентификатор и распечатать его.

Когда я запускаю этот файл, я получаю список индексов должны быть целыми или ломтиками, а не str.

import json

def main():

    f = open('pokedex.json')
    data = json.load(f)
    f.close()
    #print data
    id_poke = data['_embedded']['id_poke']
    id_info = []
    for i in id_poke:
        id_poke.append(i['id'])


if __name__ == '__main__':
    main()

Ответы [ 2 ]

1 голос
/ 22 февраля 2020

Взгляните на образец json, который вы включили в свой вопрос: он начинается с [, то есть это список , а не словарь. Когда вы присваиваете этот объект переменной data, а затем пытаетесь проиндексировать этот список с помощью (строки) ключа _embedded, вы получаете сообщение об ошибке.

Я не знаю, как вы ожидали это работает, так как ваш json файл не имеет ни _embedded, ни id_poke в качестве ключей, но для начала, вот как распечатать цифры c id и Engli sh имя каждого объекта; Вы можете взять его оттуда.

for poke in data:   # magic iteration over a list: data[0], data[1] etc.
    print(poke["id"], poke["name"]["english"])
0 голосов
/ 22 февраля 2020

Объявить

id_poke = data['_embedded']['id_poke']

As str ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...