La conversion de “vrai” (JSON) pour Python équivalent “Vrai”
Le Train statut de l'API-je utiliser récemment ajouté deux autres paires clé-valeur (has_arrived, has_departed)
dans l'objet JSON, qui a causé mon script crash.
Voici le dictionnaire:
{
"response_code": 200,
"train_number": "12229",
"position": "at Source",
"route": [
{
"no": 1,
"has_arrived": false,
"has_departed": false,
"scharr": "Source",
"scharr_date": "15 Nov 2015",
"actarr_date": "15 Nov 2015",
"station": "LKO",
"actdep": "22:15",
"schdep": "22:15",
"actarr": "00:00",
"distance": "0",
"day": 0
},
{
"actdep": "23:40",
"scharr": "23:38",
"schdep": "23:40",
"actarr": "23:38",
"no": 2,
"has_departed": false,
"scharr_date": "15 Nov 2015",
"has_arrived": false,
"station": "HRI",
"distance": "101",
"actarr_date": "15 Nov 2015",
"day": 0
}
]
}
Il n'est pas surprenant, j'ai eu l'erreur suivante:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'false' is not defined
Si je ne me trompe pas, je pense que c'est parce que la valeur booléenne dans la réponse JSON est false
/true
alors que Python reconnaît False
/True
.
Est-il un moyen de contourner cela?
PS: j'ai essayé la conversion de la réponse JSON de has_arrived
à la chaîne et de le convertir ensuite en arrière pour une valeur booléenne, seulement pour découvrir que je vais toujours avoir une True
valeur s'il y a du caractère dans la chaîne.
Je suis un peu coincé ici.
Vous pouvez simplement
sed
sur le json à l'avance.docs.python.org/dev/library/json.html
Pourquoi? C'est JSON, pas Python.
Oui, c'était assez bête dans la compréhension.
OriginalL'auteur Jarwin | 2015-11-15
Vous devez vous connecter pour publier un commentaire.
Même si Python est l'objet de la déclaration de la syntaxe est très similaire à la syntaxe JSON, ils sont distincts et incompatibles. Ainsi que le
True
/true
problème, il existe d'autres problèmes (par exemple, Json et Python gérer les dates de manière très différente, et python permet des commentaires alors que Json n'est pas).La solution est de convertir de l'un à l'autre.
Python json bibliothèque peut être utilisée pour analyser les (lire) le Json dans une chaîne de caractères et de le convertir en un objet python...
Vous pouvez convertir des objets python json trop...
Exemple:
Et un second exemple montrant comment le vrai/Vrai la conversion se produit. Notez également que les modifications à la citation, et de la façon dont le commentaire est dépouillé...
De sortie:
data_from_api
variable, il a donné le même message d'erreur (faux nom n'est pas défini). Donc j'ai initialisé le dictionnaire comme une chaîne de caractères (data_from_api=' <dict> '
et ensuite, j'ai utilisé leloads
fonction de ce qui a fonctionné comme prévu. Ce que je veux savoir, c'est que le dictionnaire qui-je obtenir à partir de l'api est très grande(j'ai réduit la taille de la question pour des raisons de simplicité), est la façon la plus efficace de le faire?Le problème est que vous avez une chaîne de caractères qui contient Json et vous êtes à la traiter comme une chaîne de caractères qui contient Python. Les deux ne sont pas les mêmes.
data_from_api
devrait être une chaîne de caractères contenant exactement ce que vous avez posté dans la question. Si vous lisez ceci à partir d'un fichier ou d'une requête Http dépend de la source de données que vous n'avez pas spécifié dans votre question. Lejson
bibliothèque de convertir des chaînes json dans des objets python et vice-versaJ'ai ajouté un exemple de cas où les données fournies sont traitées comme un multi-ligne de chaîne littérale. Ne fait que rendre les choses plus claires? (
"""..."""
est une façon de définir des chaînes de caractères qui s'étendent sur plusieurs lignes et contenant"
'). Une fois que vous avez une variable contenant le json, la conversion est simple. Comment vous alimenter cette variable dépendra de l'endroit où vous obtenez vos données. Pour la prochaine fois, y compris des informations / un extrait de code dans la question aurait été utile.OriginalL'auteur Basic
Au lieu de faire
eval
sur la réponse, utilisez lejson
module.OriginalL'auteur memoselyk