Jquery 如何从simplejson.dumps反序列化(反序列化)JSON中的HTML片段?
我正在从事一个Django项目,其中一个前端人员要求,对于我们的一个ajax请求,他希望我返回一个JSON dict,其中一个键是来自模板的一些呈现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
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,您应该检查: