django escapejs 和 simplejson

发布于 2024-12-09 20:07:57 字数 780 浏览 1 评论 0原文

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

In [30]: s1 = ['test', '<script>']

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

工作正常。

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

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。所以当我在模板中使用它们时不会出现语法错误。

谢谢。 :)

I'm trying to encode a Python array into json using simplejson.dumps:

In [30]: s1 = ['test', '<script>']

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

Works fine.

But I want to escape the strings first (using escapejs from Django) before calling simplejson.dumps:

In [35]: s_esc
Out[35]: [u'test', u'\\u003Cscript\\u003E']

In [36]: print simplejson.dumps(s_esc)
["test", "\\u003Cscript\\u003E"]

My problem is: I want the escaped string to be: ["test", "\u003Cscript\u003E"] instead of ["test", "\\u003Cscript\\u003E"]

I can use replace:

In [37]: print simplejson.dumps(s_esc).replace('\\\\', '\\')
["test", "\u003Cscript\u003E"]

But is this a good approach? I just want to escape the strings first before encoding them to json. So there will be no syntax errors when I use them in template.

Thanks. :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

所有深爱都是秘密 2024-12-16 20:07:57

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 代码 相对小,可能会被拉入早期代码或与 Python 2.6+ 的 json 包一起使用< /a> -- 虽然我自己没有尝试过

simplejson 2.1.0 and later include a JSONEncoderForHTML encoder that does exactly what you want. To use it in your example:

>>> s1 = ['test', '<script>']
>>> simplejson.dumps(s1, cls=simplejson.encoder.JSONEncoderForHTML)
'["test", "\\u003cscript\\u003e"]'

I ran into this recently where I didn't have control over the code that was generating the data structures, so I couldn't escape the strings as they were being assembled. JSONEncoderForHTML solved the problem neatly at the point of output.

Of course, you'll need to have simplejson 2.1.0 or later. (Django used to come with an older version, and Django 1.5 deprecated django.utils.simplejson entirely.) If you can't upgrade for some reason, the JSONEncoderForHTML code is relatively small and could probably be pulled into earlier code or used with Python 2.6+'s json package -- though I haven't tried this myself

暖心男生 2024-12-16 20:07:57

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

You're doing the operations in the wrong order. You should dump your data to a JSON string, then escape that string. You can do the escaping with the addslashes Django filter.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文