J'ai des problèmes tout en analysant un JSON avec Python, et maintenant je suis coincé. Je peux passer à travers le JSON, par exemple: p> Le problème vient parce que parfois, le JSON N'a pas contenant tous les "champs", par exemple, le champ mais je pense ne pas être ok. P> p>
Le problème est que les entités de mon JSON ne sont pas toujours les mêmes. Le Json est quelque chose comme: téléphone code>, est parfois manquant, donc, le script échoue avec
keerror code>, car la touche téléphone < / em> manque dans cette entrée.
Donc, ma question: Comment puis-je exécuter ce script, laissant un espace vide où téléphone em> est manquant?
J'ai essayé avec: p>
4 Réponses :
Utilisez ou, simplement: p> dict.get code> au lieu de
[] code>:
obtenez code> retournera le deuxième argument (par défaut,
Aucun code>) au lieu de soulever un
KeyError code> lorsque la clé n'est pas trouvée. p> p>
Il existe plusieurs fonctionnalités de dictionnaire utiles que vous pouvez utiliser pour fonctionner avec ceci.
Tout d'abord, vous pouvez utiliser au-delà de cela, vous pouvez regarder dans le dans code> pour tester si une clé existe ou non dans un dictionnaire: p >
obtenir code> pourrait également être utile; Il vous permet de spécifier une valeur par défaut si la clé est manquante: p>
collections de la bibliothèque standard.defaultdict code>, Mais cela pourrait être surchargé. P> p>
Si les données sont manquantes dans un seul endroit, alors dict.get em> peut être utilisé pour remplir la valeur manquante de la valeur manquante: Si le problème est plus répandu, vous pouvez avoir l'analyseur JSON Utilisez un DefaultDict em> ou dictionnaire personnalisé au lieu d'un dictionnaire régulier. Par exemple, étant donné la chaîne JSON: p> analyse avec: p> comme une note latérale, si vous voulez Pour nettoyer vos ensembles de données et appliquer la cohérence, il existe un outil fine appelé Kwalify qui la validation du schéma sur JSON (et sur yaml); p> p>
Nice, j'aime mieux ça alors defaultDict code> car à l'intérieur du
__ manquant __ code> Méthode pourrait ajouter une logique pour attraper un bogue potentiel. Avec
DefaultDict Code> Je crains toujours parce que je ne vais pas obtenir de KeyError lorsque je fais une faute de frappe.
Entrées ['Extensions']. Obtenez ('Téléphone', {}). Obtenez ('autreMissingkey', {}) code> est presque 3x aussi rapide (sur Deb9's py3.5) comme
objet_hook = APPROCHE DE VIDEDICT CODE>, et cela fonctionne pour plusieurs niveaux
Deux manières.
One est de vous assurer que vos dictionnaires sont standard et que lorsque vous les lisez, ils ont tous les champs. L'autre doit être prudent lors de l'accès aux dictionnaires. P>
Voici un exemple de veille à vous assurer que vos dictionnaires sont standard: p> Voici un exemple de Être prudent lors de l'accès aux dictionnaires: p>