json KeyError avec json.charges
JSON semble être hiccuping sur les énoncés suivants:
{"delete":{"status":{"id":12600579001,"user_id":55389449}}}
extrait de code:
temp = json.loads(line)
text = temp['text']
J'obtiens l'erreur suivante de sortie lorsque le code ci-dessus extrait de rencontre des lignes semblables à celles de la JSON 'dictionnaire':
text = temp['text']
KeyError: 'text'
Est-ce parce qu'il n'y a pas de "texte" dans la ligne ou parce que "supprimer" n'est pas dans le dictionnaire?
OriginalL'auteur user322775 | 2010-04-21
Vous devez vous connecter pour publier un commentaire.
C'est parce qu'il n'y a pas de "texte". Si vous
print temp
ou de vérifier si la clé'text'
est dans le dictionnaire Python, vous remarquerez qu'il n'y a pas de clé nommée'text'
. En fait,temp
a qu'une seule clé:'delete'
. Le dictionnaire qui est référencé par'delete'
contient une clé unique'status'
qui contient un autre dictionnaire avec deux clés:'user_id'
et'id'
.En d'autres termes, votre structure est-ce:
Comme vous pouvez le voir, il n'y a pas de "texte" clé de n'importe où.
En outre, vous pouvez vérifier par vous même:
OriginalL'auteur Dustin
Il ressemble à ce qui se passe parce que "texte" n'est pas là. Peut-être que vous pouvez utiliser quelque chose comme
pour vérifier que le "texte" qui existe avant de l'utiliser.
Edit:
J'ai pris l'exemple donné dans le commentaire et l'ajout d'un if/elif/else bloc.
Exemple De Bloc #1:
Exemple De Bloc #2:
J'ai ajouté une version modifiée de votre code à ma réponse. Cela fonctionne pour votre fichier?
Cela m'a passé le premier obstacle. Merci!
OriginalL'auteur ChronoPositron
À partir de l'extrait de code que vous avez posté, il ressemble à
temp
doit avoir un seul élément, avec la clé"delete"
. Vous n'avez pas une clé'text'
, donc je ne suis pas sûr de ce quetemp['text']
devrait ressembler.OriginalL'auteur Mike Graham
Essayer ce pour voir le problème en détail:
Qui génère cette sortie:
La seule clé dans la
temp
dict est "supprimer". Ainsitemp['text']
génère un KeyError.OriginalL'auteur Chris Johnson
Pourquoi ne pas mettre cela entre les première et deuxième lignes:
OriginalL'auteur SamB
essayer comme ça:
OriginalL'auteur user14372
Merci à tous pour les suggestions. Le cœur du problème était que le Twitter format json a un dictionnaire dans un dictionnaire. La solution passe par un double index pour obtenir les variables que j'ai besoin de vérifier.
OriginalL'auteur user322775
OriginalL'auteur Sam