json-rpc格式错误的请求

时间:2011-04-12 16:31:32

标签: json html-parsing django-views

我正在构建一个使用json-rpc与django后端通信的应用程序。到目前为止,一切都运作良好。但是我发现“”发送异常。据我所知,请求工作正常,但是django严重地解释了响应。我在下面复制了简化的请求和回复:

请求:

{"jsonrpc":"2.0","id":"1","method":"test","params":
{"id":"80","name":"tests","introduction":"hello  there"}}

Django收到:

<QueryDict:u'{"jsonrpc":"2.0","id":"1","method":"test","params":
{"id":"80","name":"tests","introduction":"hello ': [u''], u'nbsp': [u''], u'there"}}': [u'']}>

预期回应:

<QueryDict: {u'{"jsonrpc":"2.0","id":"1","method":"test","params":
{"id":"80","name":"tests","introduction":"hello &nbsp;there"}}': [u'']}>

似乎django解释了&amp;而且;作为特殊字符,因此在其request.POST变量中创建了一个意外的字典。

我需要做些什么来确保json字符串不会格式错误?我尝试使用php htmlspecialchars()方法对其进行编码,但由于这不会删除'&amp;'问题依然存在。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

Django通过解码主体(你的json字符串)来处理(POST?)请求,好像它是一个查询字符串,而不是一个json。

在查询字符串中,&;表示键:值对的结尾。在这两个字符上拆分您的请求主体会产生您在Django QueryDict中看到的键:值对。

您需要掌握POST请求正文并使用标准的lib json或simplejson模块将其显式解码为dict。

我对Django没什么经验,但我想你在视图处理程序的某个地方你会做类似的事情:

try:
    data = json.loads(requesst.raw_post_data)
    ## work with the data...
except ValueError:
    ## do something...

毫无疑问,Django提供了一种方法来将这个json处理移出您的视图,并提供更合适的地方。