我正在尝试使用simplejson.dumps将Python数组编码为json:
In [30]: s1 = ['test', '<script>']
In [31]: simplejson.dumps(s1)
Out[31]: '["test", "<script>"]'工作正常。
但在调用simplejson.dumps之前,我想先对字符串进行转义(使用Django中的转义to ):
In [35]: s_esc
Out[35]: [u'test', u'\\u003Cscript\\u003E']
In [36]: print simplejson.dumps(s_esc)
["test", "\\u003Cscript\\u003E"]我的问题是:我希望转义的字符串是:["test", "\u003Cscript\u003E"]而不是["test", "\\u003Cscript\\u003E"]
我可以使用replace
In [37]: print simplejson.dumps(s_esc).replace('\\\\', '\\')
["test", "\u003Cscript\u003E"]但是这是一个好的方法吗?我只想在将字符串编码为json之前先对它们进行转义。因此,当我在模板中使用它们时,不会出现语法错误。
谢谢。:)
发布于 2011-10-18 10:11:13
simplejson 2.1.0及更高版本包含一个JSONEncoderForHTML编码器,它可以执行您想要的操作。在您的示例中使用它:
>>> s1 = ['test', '<script>']
>>> simplejson.dumps(s1, cls=simplejson.encoder.JSONEncoderForHTML)
'["test", "\\u003cscript\\u003e"]'我最近遇到了这种情况,我无法控制生成数据结构的代码,因此我无法在汇编字符串时对其进行转义。JSONEncoderForHTML在输出点巧妙地解决了这个问题。
当然,您需要使用simplejson 2.1.0或更高版本。(Django使用旧版本,Django 1.5完全废弃了django.utils.simplejson。)如果由于某种原因不能升级,那么JSONEncoderForHTML code相对较小,可以放入更早的代码中或与Python 2.6+'s json package一起使用--尽管我自己还没有尝试过这样做
发布于 2011-10-16 20:46:35
您正在按错误的顺序执行操作。您应该将数据转储为JSON字符串,然后对该字符串进行转义。您可以使用addslashes Django过滤器进行转义。
https://stackoverflow.com/questions/7784303
复制相似问题