Jquery 如何从simplejson.dumps反序列化(反序列化)JSON中的HTML片段?

Jquery 如何从simplejson.dumps反序列化(反序列化)JSON中的HTML片段?,jquery,python,ajax,django,json,Jquery,Python,Ajax,Django,Json,我正在从事一个Django项目,其中一个前端人员要求,对于我们的一个ajax请求,他希望我返回一个JSON dict,其中一个键是来自模板的一些呈现HTML。因此,例如: d = { "hits": 22, "page": 3, "somehhtml": """<div id='item1'>Something</div><div id='item2'>More Stuff</div> <p>More after some

我正在从事一个Django项目,其中一个前端人员要求,对于我们的一个ajax请求,他希望我返回一个JSON dict,其中一个键是来自模板的一些呈现HTML。因此,例如:

d = {
  "hits": 22,
  "page": 3,
  "somehhtml": """<div id='item1'>Something</div><div id='item2'>More Stuff</div>

<p>More after some linebreaks.</p>"""
}
d={
“命中率”:22,
"第3页":,
“somehhtml”:“SomethingMore东西”
一些换行符后会有更多内容。

“”“ }
当我使用simplejson.dumps返回此值时,它将转义HTML,可能是为了使其成为有效的JSON,并加载换行符和引号字符

作为一个黑客,我在dict中添加了一个字符串模板替换字符,然后用dumps()将其序列化,然后在将其发送回浏览器之前用呈现的模板替换它。显然,这很可怕,而且肯定不是正确的方法

因此,正确的处理方法是在客户端使用jQuery/JS方式进行反序列化,还是我需要在Python端编写自己的序列化程序来避免某些事情?我试图在JS中将其传递给eval(),但这给了我一个语法错误

我现在所做的(即不逃避责任)是个坏主意,有实际原因吗?(帮助我解释,不是因为我认为我不应该改变它)

谢谢


Ludo.

我不明白为什么需要取消json字符串的scape,而应该将其转义为有效的javascript和python字符串

顺便说一句,换行符
\n
与json转储程序没有任何关系,只是因为键“somehhtml”的值是一个包含新行的多行字符串(我认为这是一个错误,可能您想把它放到

作为总结,让我们放一些代码:):

python

>>> import json
>>> json.dumps(d)
'{"hits": 22, "page": 3, "somehhtml": "<div id=\'item1\'>Something</div><div id=\'item2\'>More Stuff</div>\\n\\n<p>More after some linebreaks.</p>"}'
导入json >>>json.dumps(d) “{“hits”:22,“page”:3,“somehhtml”:“SomethingMore-Stuff\\n\\n一些换行符之后的更多内容。

”}” javascript

>>> s = '{"hits": 22, "page": 3, "somehhtml": "<div id=\'item1\'>Something</div><div id=\'item2\'>More Stuff</div>\\n\\n<p>More after some linebreaks.</p>"}'
>>> JSON.parse(s)
Object { hits=22, page=3, somehhtml="<div id='item1'>Somethi...er some linebreaks.</p>"}
// eval is not safe, but you should add a parentheses as a workaround  
>>> eval('(' + s + ')')
Object { hits=22, page=3, somehhtml="<div id='item1'>Somethi...er some linebreaks.</p>"}
>>s='{“hits”:22,“page”:3,“somehhtml”:“SomethingMore-Stuff\\n\\n一些换行符后的更多内容。

”} >>>JSON.parse(s) 对象{hits=22,page=3,somehhtml=“Somethi…er一些换行符。

”} //eval不安全,但应添加括号作为解决方法 >>>评估(“(“+s+”)”) 对象{hits=22,page=3,somehhtml=“Somethi…er一些换行符。

”}
否,换行符是正确的,因为该值来自渲染的Django模板。JSON.parse()正是我想要的-谢谢:)@Ludo:好的,这很有意义,非常欢迎您,顺便说一句,如果您使用jquery,您应该检查: