Google App Engine Python simplejson 转义问题?

2 投票
2 回答
673 浏览
提问于 2025-04-16 20:06

在GAE上使用的django.utils.simplejson版本,比如说,它会把“/”这个字符进行转义处理,但在执行js = json.dumps(my_dict_w_strings_w_newline_and_slash)时,却没有处理“\n”这个换行符。这就导致我在其他地方用json.loads(js)的时候出现了问题。

有没有什么建议可以解决这个问题呢?这些字符串是经过base64编码的数据,这样处理会把它们搞坏。

2 个回答

3

我试过SDK里自带的simplejson版本(Django 0.96和1.2),它们都会把'\n'这个字符转义:

>>> simplejson.dumps({'foo': '\n'})
'{"foo": "\\n"}'

还有在 http://shell.appspot.com/ 上:

Google App Engine/1.5.1
Python 2.5.2 (r252:60911, Mar 17 2011, 15:16:30) 
[GCC 4.3.1]

>>> from django.utils import simplejson
>>> simplejson.dumps({'foo': '\n'})
'{"foo": "\\n"}'
>>> simplejson.dumps('foo/bar')
'"foo\\/bar"'
0

我的同事建议了这个:

if json.encoder.ESCAPE_DCT.get('/') != '/':
    json.encoder.ESCAPE_DCT['/'] = '/'

这个方法运行得很好。

撰写回答