Conversion de chaîne JSON en Dictionnaire pas de liste
J'essaie de transmettre un fichier JSON et de convertir les données en Dictionnaire.
Jusqu'à présent, c'est ce que j'ai fait:
import json
json1_file = open('json1')
json1_str = json1_file.read()
json1_data = json.loads(json1_str)
Je m'attends à ce que json1_data
soit un type dict
mais il apparaît en fait comme un type list
Quand je le vérifie avec type(json1_data)
.
Qu'est-ce que je manque? J'ai besoin que ce soit un dictionnaire pour pouvoir accéder à l'une des clés.
3 réponses
Votre JSON est un tableau avec un seul objet à l'intérieur, donc quand vous le lisez, vous obtenez une liste avec un dictionnaire à l'intérieur. Vous pouvez accéder à votre dictionnaire en accédant à l'élément 0 de la liste, comme indiqué ci-dessous:
json1_data = json.loads(json1_str)[0]
Maintenant, vous pouvez accéder aux données stockées dans points de données comme vous l'attendiez:
datapoints = json1_data['datapoints']
J'ai une autre question si quelqu'un peut mordre: j'essaie de prendre la moyenne des premiers éléments de ces points de données(c'est-à-dire les points de données[0][0]). Juste pour listez-les, j'ai essayé de faire des points de données[0: 5] [0] mais tout ce que je reçois est le premier point de données avec les deux éléments par opposition à vouloir obtenir les 5 premiers points de données contenant seulement le premier élément. Est-il un moyen de faire cela?
datapoints[0:5][0]
ne fait pas ce que vous attendez. datapoints[0:5]
renvoie une nouvelle tranche de liste contenant uniquement les 5 premiers éléments, puis l'ajout de [0]
à la fin de celle-ci ne prendra que le premier élément de cette tranche de liste résultante. Ce que vous devez utiliser pour obtenir le résultat vous voulez est une liste compréhension :
[p[0] for p in datapoints[0:5]]
Voici un moyen simple de calculer la moyenne:
sum(p[0] for p in datapoints[0:5])/5. # Result is 35.8
Si vous êtes prêt à installer NumPy , alors c'est encore plus facile:
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
L'utilisation de l'opérateur ,
avec la syntaxe de découpage pour les tableaux de NumPy a le comportement que vous attendiez à l'origine avec les tranches de liste.
Voici un extrait simple qui est lu dans un fichier texte json
à partir d'un dictionnaire. Notez que votre fichier json doit suivre la norme json, il doit donc avoir "
guillemets doubles plutôt que '
guillemets simples.
Votre vidage JSON.Fichier txt:
{"test":"1", "test2":123}
Script Python:
import json
with open('/your/path/to/a/dict/dump.txt') as handle:
dictdump = json.loads(handle.read())
La meilleure façon de charger les données JSON dans le dictionnaire est de pouvoir utiliser le chargeur JSON intégré.
Voici l'extrait d'échantillon qui peut être utilisé.
import json
f = open("data.json")
data = json.load(f))
f.close()
type(data)
print(data[<keyFromTheJsonFile>])