Итерация по JSON - typeError в индексе списка

1

При попытке пройти через объект JSON я получаю странную "кастинг". Как только значение итерации достигает 100, скрипт выдает ошибки и жалуется, что значения ключа должны быть целыми.

import json
#from pprint import pprint

with open('/tmp/myfile.json') as f:
    data = json.load(f)
line_entries = len(data)
len_w = len(data[0]["w"])
#print(line_entries)
line_iter = 0
main_iter = 0
sub_iter = 0
while line_iter < line_entries:
    v = data[line_iter]["v"]["h"]
    c = data[line_iter]["v"]["d"]
    print("=========================================================")
    print("Dest: ", v)
    print("Cart: ", c)

    while sub_iter < len_wp:
        sn = data[line_iter]["w"][sub_iter]["s"]["n"]
        at = data[line_iter]["w"][sub_iter]["at"]
        dt = data[line_iter]["w"][sub_iter]["dt"]
        sub_iter = sub_iter + 1
        print(sn)
        print(at)
        print(dt)
    line_iter = line_iter + 1
    print("=========================================================")

Сценарий отлично распечатывается для записей с 0 по 99, но из 100 он говорит:

v = data[line_iter]["v"]["h"]
TypeError: list indices must be integers or slices, not str
  • 1
    Было бы очень полезно, если бы вы опубликовали фрагмент из файла JSON. В частности, запись до, после и сама запись на итерации 100. Таким образом, мы можем сравнить 99-ю итерацию с 100, где она терпит неудачу. Мы слепы в этом, но пирипири, скорее всего, на стадионе, судя по выводу ошибки. Я оставлю вас с этим: всегда полезно сделать print(data[line_iter]) чтобы увидеть, каковы значения на самом деле. Конечно, он напечатает 100 раз. но в случае сбоя вы увидите данные как есть, и это должно вам помочь: «оооо, данные не те, что были на 99-й итерации» :)
Теги:

1 ответ

1
Лучший ответ

Объекты JSON могут содержать списки или словари и другие. До тех пор, пока у вас есть словарь, вы можете получить к нему доступ через строковый тип типа "v" в вашем примере, но это не работает для списков. Таким образом, я предполагаю, что запись 100 имеет тип списка.

  • 0
    Благодаря обоим респондентам - проблема действительно была проблемой записи - которая указала мне на проблему с самой функцией «импорта» - похоже, что-то пошло не так с нумерацией страниц при создании файла JSON из исходного кода.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню