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.

130
demandé sur Michael Ohlrogge 2013-10-21 01:56:20

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.

173
répondu DaoWen 2015-01-31 18:29:40

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())
7
répondu user1767754 2018-01-15 21:58:05

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>])
3
répondu Sampat Kumar 2018-05-29 10:54:51