首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django转义和simplejson

django转义和simplejson
EN

Stack Overflow用户
提问于 2011-10-16 20:40:00
回答 2查看 3.5K关注 0票数 6

我正在尝试使用simplejson.dumps将Python数组编码为json:

代码语言:javascript
复制
In [30]: s1 = ['test', '<script>']

In [31]: simplejson.dumps(s1)
Out[31]: '["test", "<script>"]'

工作正常。

但在调用simplejson.dumps之前,我想先对字符串进行转义(使用Django中的转义to ):

代码语言:javascript
复制
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

代码语言:javascript
复制
In [37]: print simplejson.dumps(s_esc).replace('\\\\', '\\')
["test", "\u003Cscript\u003E"]

但是这是一个好的方法吗?我只想在将字符串编码为json之前先对它们进行转义。因此,当我在模板中使用它们时,不会出现语法错误。

谢谢。:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-18 10:11:13

simplejson 2.1.0及更高版本包含一个JSONEncoderForHTML编码器,它可以执行您想要的操作。在您的示例中使用它:

代码语言:javascript
复制
>>> 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一起使用--尽管我自己还没有尝试过这样做

票数 8
EN

Stack Overflow用户

发布于 2011-10-16 20:46:35

您正在按错误的顺序执行操作。您应该将数据转储为JSON字符串,然后对该字符串进行转义。您可以使用addslashes Django过滤器进行转义。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7784303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档