Ваш JSON - це масив із одним об’єктом всередині, тому, читаючи його, ви отримуєте список зі словником всередині. Ви можете отримати доступ до свого словника, відкривши пункт 0 у списку, як показано нижче:
json1_data = json.loads(json1_str)[0]
Тепер ви можете отримати доступ до даних, збережених у точках, так само, як ви очікували:
datapoints = json1_data['datapoints']
У мене є ще одне питання, якщо хтось може вкусити: я намагаюся взяти середнє значення перших елементів у цих точках (тобто точок даних [0] [0]). Тільки для того, щоб перерахувати їх, я намагався робити точки даних [0: 5] [0], але все, що я отримую, - це перша точка даних з обома елементами, на відміну від того, щоб хотіти отримати перші 5 точок даних, що містять лише перший елемент. Чи є спосіб це зробити?
datapoints[0:5][0]
не робить те, що ви очікуєте. datapoints[0:5]
повертає новий фрагмент списку, що містить лише перші 5 елементів, а потім додавання [0]
в кінці його займе лише перший елемент з цього результуючого фрагмента списку . Що потрібно використовувати для отримання потрібного результату - це розуміння списку :
[p[0] for p in datapoints[0:5]]
Ось простий спосіб розрахунку середнього:
sum(p[0] for p in datapoints[0:5])/5. # Result is 35.8
Якщо ви готові встановити NumPy , тоді це ще простіше:
import numpy
json1_file = open('json1')
json1_str = json1_file.read()
json1_data = json.loads(json1_str)[0]
datapoints = numpy.array(json1_data['datapoints'])
avg = datapoints[0:5,0].mean()
# avg is now 35.8
Використання ,
оператора з синтаксисом нарізки для масивів NumPy має таку поведінку, якої ви спочатку очікували з фрагментами списку.