2010-11-05 14 views
3

J'essaie de générer un objet json correctement formaté à utiliser en javascript. J'ai essayé simplejson.dumps (chaîne), mais il se comporte différemment sur ma machine locale (dans le shell python) par rapport au serveur (exécutant google app engine). Par exemple, localement, je vais obtenir:simplejson n'échappant pas de guillemet simple sur le serveur du moteur de l'application

>>> s= {u'hello': u"Hi, i'm here"} 
>>> simplejson.dumps(s) 
'{"hello": "Hi, i\'m here"}' 

qui tout semble bien. Mais quand je le lance sur le serveur, je reçois

{ « bonjour »: « Salut, je suis ici »}

où la citation unique n'est pas échappé, ce qui jette une erreur dans mon javascript.

À court de faire un secondaire string.replace("'", r"\'"), est-ce que quelqu'un a des suggestions? Je suis à court et j'ai déjà passé beaucoup de temps à essayer de le comprendre ...

Répondre

2

Je pense que vous êtes confus par le comportement repr par rapport à la sortie réelle.

>>> s= {u'hello': u"Hi, i'm here"} 
>>> simplejson.dumps(s) 
'{"hello": "Hi, i\'m here"}' 
>>> print simplejson.dumps(s) 
{"hello": "Hi, i'm here"} 

Lorsque vous demandez simplement le résultat de l'appel simplejson, le shell Python qui résultat en utilisant repr - qui échappe de sorte que vous pouvez couper et coller de nouveau plus tard. Cependant, il n'y a pas de barre oblique inverse dans la chaîne produite par dumps.

1

Il n'y a pas d'échappement nécessaire pour les guillemets simples dans JSON, et en fait il n'y a pas de barre oblique inversée dans la chaîne retournée dans votre exemple: Donc, je soupçonne que votre erreur javascript est quelque chose d'autre.

+0

Merci! Je pense que je comprends le problème maintenant ... Je supposais que simplejson.dumps() échapperait des guillemets simples, et donc quand jquery a essayé de gérer la sortie * sans * guillemets simples échappés, il pensait que la chaîne json se terminait avant qu'elle ne le fasse réellement. ie: jQuery.parseJSON ('{"bonjour": "Bonjour, je suis là"}); était interprété comme jQuery.parseJSON ({"bonjour": "Salut, je 'qui me donnait une erreur" manquant "). – npisenti