2010-05-03 4 views
0

Im программирование с помощью django и мне нужно сериализовать объект в строку, но мне нужно получить строку/сериализованную.Simplejson dumps char

Пример:

simplejson.dumps ({ 'ID': 'корень/лист'})

мне нужен выход, как это:

«{ "идентификатор":«Корень/лист "}»

, но я получаю это:

'{ "ID": "корень \\\\ лист"}'

чем k вы !!

PD: Извините за мой английский :-P

ответ

1

JSON требует, чтобы в буквальном смысле \ характер экранировать, и представлен в виде \\. Python также представляет буквенный символ \ escaped, как \\. Между двумя из них \ становится \\\\.

Обратите внимание на следующее Python:

>>> "\\/" == "\/" 
True 

>>> {"id": "root\/leaf"} == {"id": "root\\/leaf"} 
True 

>>> {"id": "root\\/leaf"}["id"] 
'root\\/leaf' 

>>> print {"id": "root\\/leaf"}["id"] 
root\/leaf 

Python печатает дополнительный побег. Поэтому, когда вы делаете simplejson.dumps({"id": "root\/leaf"}), python печатает правильный результат {'id': 'root\\/leaf'}, но с дополнительными побегами на Python, следовательно {'id': 'root\\\\/leaf'}. Python рассматривает каждый \\ как отдельный символ. Если вы пишете файл, а не строку, вы получите {'id': 'root\\/leaf'}.

Edit: Я мог бы добавить, буквальный JSON {"id": "root\/leaf"} будет декодировать в {'id': 'root/leaf'}, как буквальный JSON \/ карты к / характеру. И \/, и / действительны JSON-кодировки /; кажется, нет простого способа сделать simplejson использовать \/ вместо / для кодирования /.