Seul contre les guillemets doubles json charges en Python
Je remarque que les guillemets simples cause simplejson
's loads
fonction à l'échec:
>>> import simplejson as json
>>> json.loads("\"foo\"")
'foo'
>>> json.loads("\'foo\'")
Traceback (most recent call last):
...
ValueError: No JSON object could be decoded
Je suis d'analyse des choses comme: foo = ["a", "b", "c"]
à partir d'un fichier texte dans des listes en Python et tiens aussi à accepter foo = ['a', 'b', 'c']
. simplejson
est pratique pour faire des foo
automatiquement dans une liste.
Comment puis-je obtenir loads
à accepter des guillemets simples, ou de remplacer automatiquement le double pour les guillemets simples sans les détruire à l'entrée? merci.
Selon le spécification JSON, il n'est pas JSON si c'est d'utiliser des guillemets simples.
Autant que je sache, tous chaînes de caractères dans les chaînes JSON doit être entre guillemets.
Ok, alors comment puis-je remplacer unique pour les guillemets via python?
Ne pouvez-vous pas réparer ce qui est de la production de la sortie défectueuse à la place? Êtes-vous certains qu'il est censé être JSON?
Autant que je sache, tous chaînes de caractères dans les chaînes JSON doit être entre guillemets.
["a"]
est JSON valide alors que ['a']
n'est-ce pasOk, alors comment puis-je remplacer unique pour les guillemets via python?
Ne pouvez-vous pas réparer ce qui est de la production de la sortie défectueuse à la place? Êtes-vous certains qu'il est censé être JSON?
ast.literal_eval()
. Si vous souhaitez analyser Python littéraux, utiliser un parser écrit pour cette tâche.
OriginalL'auteur user248237dfsf | 2013-01-15
Vous devez vous connecter pour publier un commentaire.
Utiliser le bon outil pour le travail, vous n'êtes pas parsing JSON mais Python, afin de l'utiliser
ast.literal_eval()
à la place:JSON documents utilisez toujours des guillemets doubles pour les chaînes, utiliser de l'UTF-16 pour
\uhhhh
hex syntaxe d'échappement, ont{...}
objets pour les paires clé-valeur avec les touches toujours les cordes et les séquences sont toujours[...]
les listes et utilisernull
,true
etfalse
valeurs; à noter que le minuscule booléens. Numéros de venir en entiers et à virgule flottante formes.En Python, les représentations de chaîne peut utiliser les guillemets simples et doubles, Unicode échappe à utiliser
\uhhhh
et\Uhhhhhhhh
formes (pas de l'UTF-16 paires de substitution), des dictionnaires avec{...}
affichage de la syntaxe peuvent avoir des clés dans de nombreux types différents plutôt que de simplement les chaînes, les séquences peuvent être des listes ([...]
), mais vous pouvez également utiliser des n-uplets ((...)
), ou vous pourriez avoir d'autres types de conteneurs encore. Python aNone
,True
etFalse
(Titlecase!) et les chiffres sont des nombres entiers, des flotteurs, et de formes complexes.Confus l'un avec l'autre peut mener à des erreurs d'analyse ou de subtils problèmes lors du décodage qui s'est passé pour réussir mais les données ont été interprétée à tort, comme avec échappé non-BMP codepoints tels que des Émoticônes. Assurez-vous d'utiliser la bonne méthode pour décoder! Et dans la plupart des cas lorsque vous avez la syntaxe de Python données de quelqu'un réellement utilisé la mauvaise méthode de codage et seulement accidentellement produit Python représentations. Voir si la source a besoin de fixation dans ce cas; d'habitude, la sortie a été produite en utilisant des
str(object)
oùjson.dumps(obj)
doit avoir été utilisé à la place.OriginalL'auteur Martijn Pieters
J'ai commencé à cet StackOverflow question quand on cherche à le résoudre moi-même.
La solution à utiliser
ast.literal_eval()
ne fonctionne pas pour tous mes cas, comme le texte de temps en temps des constantes de type boolean (true/false) qui ne sont pas reconnus comme Python jetons (qui sont capitalisés.)De le résoudre par moi-même, je marche pas un personnalisé JSONDecoder qui se branche sur le standard json paquet Python.
pip install git+https://github.com/jpz/tolerantjsondecoder.git
Peut-être que cela peut être utile à la personne suivante.
Également, de noter, après que j'ai terminé, j'ai trouvé plus tard que le demjson bibliothèque qui semble être une solution plus complète, cependant je n'ai pas évalué.
OriginalL'auteur polyglot