2010-11-05 2 views
3

Я пытаюсь создать правильно отформатированный json-объект для использования в javascript. Я пробовал simplejson.dumps (string), но он ведет себя по-разному на моей локальной машине (в оболочке python) и на сервере (запущен движок Google). Например, на местном уровне я получу:simplejson не ускользает от одной цитаты на сервере движка приложения

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

который выглядит хорошо. Но когда я запустить его на сервере, я получаю

{ «привет»: «Привет, я здесь»}

где апостроф не спасся, который выдает ошибку в моей JavaScript.

Короткая работа вторичного string.replace("'", r"\'"), есть ли у кого-нибудь предложения? Я в недоумении и уже потратил много времени, пытаясь понять это ...

ответ

2

Я думаю, что вы путаетесь в поведении repr против фактического вывода.

>>> 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"} 

Когда вы просто спросите за результат вызова simplejson, оболочка печатает Python, что результат, используя repr - который ускользает его так, что вы можете вырезать и вставить его обратно позже. Однако на самом деле нет никакой обратной косой черты в строке, созданной dumps.

1

В JSON нет спасения, и в строке, возвращаемой в вашем примере, нет обратной косой черты:

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

Поэтому я подозреваю, что ваша ошибка javascript - это что-то еще.

+0

Спасибо! Я думаю, что теперь понимаю проблему ... Я предполагал, что simplejson.dumps() будет избегать одиночных кавычек, и поэтому, когда jquery попытался обработать вывод * без * экранированных одинарных кавычек, он думал, что строка json закончилась до того, как она на самом деле закончится. т.е.: jQuery.parseJSON ('{"hello": "Привет, я здесь"}); интерпретировался как jQuery.parseJSON ({«hello»: «Привет, я», который давал мне «пропущенную» ошибку. – npisenti