При попытке пройти через объект 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
Объекты JSON могут содержать списки или словари и другие. До тех пор, пока у вас есть словарь, вы можете получить к нему доступ через строковый тип типа "v"
в вашем примере, но это не работает для списков. Таким образом, я предполагаю, что запись 100 имеет тип списка.
print(data[line_iter])
чтобы увидеть, каковы значения на самом деле. Конечно, он напечатает 100 раз. но в случае сбоя вы увидите данные как есть, и это должно вам помочь: «оооо, данные не те, что были на 99-й итерации» :)