Seu JSON é uma matriz com um único objeto, portanto, quando você o lê, obtém uma lista com um dicionário. Você pode acessar o seu dicionário acessando o item 0 na lista, como mostrado abaixo:
json1_data = json.loads(json1_str)[0]
Agora você pode acessar os dados armazenados no datapoints assim como você estava esperando:
datapoints = json1_data['datapoints']
Tenho mais uma pergunta, se alguém puder morder: estou tentando calcular a média dos primeiros elementos nesses pontos de dados (ou seja, pontos de dados [0] [0]). Apenas para listá-las, tentei fazer pontos de dados [0: 5] [0], mas tudo o que recebo é o primeiro ponto de dados com ambos os elementos, em vez de querer obter os primeiros 5 pontos de dados que contêm apenas o primeiro elemento. Existe uma maneira de fazer isso?
datapoints[0:5][0]
não faz o que você está esperando. datapoints[0:5]
retorna uma nova fatia da lista contendo apenas os 5 primeiros elementos e, em seguida, adicionar [0]
no final dela pega apenas o primeiro elemento dessa fatia da lista resultante . O que você precisa usar para obter o resultado desejado é uma compreensão da lista :
[p[0] for p in datapoints[0:5]]
Aqui está uma maneira simples de calcular a média:
sum(p[0] for p in datapoints[0:5])/5. # Result is 35.8
Se você deseja instalar o NumPy , é ainda mais fácil:
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
O uso do ,
operador com a sintaxe de fatiamento para matrizes de NumPy tem o comportamento que você esperava originalmente com as fatias da lista.