J'ai ce JSON dans un fichier:
{
"maps": [
{
"id": "blabla",
"iscategorical": "0"
},
{
"id": "blabla",
"iscategorical": "0"
}
],
"masks": [
"id": "valore"
],
"om_points": "value",
"parameters": [
"id": "valore"
]
}
J'ai écrit ce script pour imprimer toutes les données JSON:
import json
from pprint import pprint
with open('data.json') as f:
data = json.load(f)
pprint(data)
Ce programme soulève cependant une exception:
Traceback (most recent call last):
File "<pyshell#1>", line 5, in <module>
data = json.load(f)
File "/usr/lib/python3.5/json/__init__.py", line 319, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.5/json/decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python3.5/json/decoder.py", line 355, in raw_decode
obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Expecting ',' delimiter: line 13 column 13 (char 213)
Comment analyser le JSON et extraire ses valeurs?
Réponses:
Vos données ne sont pas au format JSON valide . Vous avez
[]
quand vous devriez avoir{}
:[]
sont pour les tableaux JSON, qui sont appeléslist
en Python{}
sont pour les objets JSON, qui sont appelésdict
en PythonVoici à quoi devrait ressembler votre fichier JSON:
Ensuite, vous pouvez utiliser votre code:
Avec les données, vous pouvez désormais également trouver des valeurs comme ceci:
Essayez-les et voyez si cela commence à avoir un sens.
la source
u'
avant chaque touche. Une idée pourquoi?Votre
data.json
devrait ressembler à ceci:Votre code doit être:
Notez que cela ne fonctionne que dans Python 2.6 et
with
versions ultérieures, car cela dépend de la déclaration . En utilisation Python 2.5from __future__ import with_statement
, en Python <= 2.4, voir la réponse de Justin Peel , sur laquelle cette réponse est basée.Vous pouvez désormais également accéder à des valeurs uniques comme celle-ci:
la source
data_file
open
plus longtemps que nécessaire.pprint
ing dans lewith
-contexte garde l'data_file
ouvert plus longtemps.data["om_points"]
,data["masks"]["id"]
. L'idée est que vous pouvez atteindre n'importe quel niveau dans un dictionnaire en spécifiant les «chemins d'accès clés». Si vous obtenez uneKeyError
exception, cela signifie que la clé n'existe pas dans le chemin. Recherchez les fautes de frappe ou vérifiez la structure de votre dictionnaire.La réponse de Justin Peel est vraiment utile, mais si vous utilisez Python 3, la lecture de JSON devrait se faire comme ceci:
Remarque: utilisez
json.loads
au lieu dejson.load
. En Python 3,json.loads
prend un paramètre de chaîne.json.load
prend un paramètre d'objet de type fichier.data_file.read()
renvoie un objet chaîne.Pour être honnête, je ne pense pas que ce soit un problème de charger toutes les données json en mémoire dans la plupart des cas.
la source
json.load
on éviter en faveur de.loads
Python 3?load
.la source
json.loads
ne décode pas plusieurs objets json. Sinon, vous obtenez l'erreur «Extra Data».}
,]
ou"
). Ainsi, vous pouvez en effet concaténer plusieurs objets dans une seule chaîne ou un seul fichier, sans ambiguïté. Le problème ici est qu'un analyseur qui attend un seul objet échoue lorsqu'il passe plus d'un objet..jsonl
(lignes json), les objets sont séparés par un caractère de nouvelle ligne qui rend le pré-traitement pour l'analyse syntaxique trivial, et permet pour diviser facilement / fichiers batch sans se soucier des marqueurs de début / fin."Ultra JSON" ou simplement "ujson" peut gérer avoir
[]
dans votre entrée de fichier JSON. Si vous lisez un fichier d'entrée JSON dans votre programme sous la forme d'une liste d'éléments JSON; tels que,[{[{}]}, {}, [], etc...]
ujson peut gérer n'importe quel ordre arbitraire de listes de dictionnaires, de dictionnaires de listes.Vous pouvez trouver ujson dans l' index du package Python et l'API est presque identique à la
json
bibliothèque intégrée de Python .ujson est également beaucoup plus rapide si vous chargez des fichiers JSON plus volumineux. Vous pouvez voir les détails des performances par rapport aux autres bibliothèques Python JSON dans le même lien fourni.
la source
Si vous utilisez Python3, vous pouvez essayer de changer votre (
connection.json
fichier) JSON en:Puis en utilisant le code suivant:
la source
with
déclaration serait mieuxIci vous allez avec un
data.json
fichier modifié :Vous pouvez appeler ou imprimer des données sur la console en utilisant les lignes ci-dessous:
Sortie attendue pour
print(data_item['parameters'][0]['id'])
:Sortie attendue pour
print(data_item['parameters'][0]['id'])
:la source
Il existe deux types dans cette analyse.
À partir d'un fichier, vous pouvez utiliser les éléments suivants
Cet arcticle explique l'analyse complète et l'obtention de valeurs à l'aide de deux scénarios. Analyser JSON à l'aide de Python
la source
En tant qu'utilisateur python3 ,
La différence entre les méthodes
load
etloads
est importante, en particulier lorsque vous lisez des données json à partir d'un fichier.Comme indiqué dans les documents:
json.load:
json.loads:
La méthode json.load peut lire directement le document json ouvert car elle est capable de lire le fichier binaire.
En conséquence, vos données json sont disponibles dans un format spécifié selon cette table de conversion:
https://docs.python.org/3.7/library/json.html#json-to-py-table
la source