/ / json.loads () renvoie un objet unicode au lieu d'un dictionnaire - python, json, python-2.7, unicode, fabric

json.loads () renvoie un objet unicode au lieu d'un dictionnaire - python, json, python-2.7, unicode, fabric

Je suis en train de lire json à partir d’un fichier sur un serveur distant en utilisant fabric:

from StringIO import StringIO

output = StringIO()
get(file_name, output)

output = output.getvalue()

La valeur de output est maintenant:

""{\n \"status\": \"failed\", \n \"reason\": \"Record already exists.\"\n}""

Quand j'essaye d'analyser cette chaîne dans un dictionnaire en utilisant json.loads(output) son retourne l'objet unicode u"{n "status": "failed", n "reason": "Record already exists."n}" plutôt qu'un dictionnaire.

J'ai trouvé un correctif assez mauvais, renvoyant simplement le nouvel objet unicode dans json.loads ():

json.loads(json.loads(output))

Y a-t-il une autre solution à cela?

À votre santé

Réponses:

16 pour la réponse № 1

Vos données sont échappées.

json.loads(output.decode("string-escape").strip("""))

devrait vous donner les résultats souhaités:

Out[12]: {"reason": "Record already exists.", "status": "failed"}

13 pour la réponse № 2

La solution ici serait de comprendre pourquoi votre fichier est doublement encodé en JSON, mais étant donné que les données le transmettant json.loads deux fois est la bonne approche.