javascript – Django:从QueryDict读取JSON对象的数组

前端之家收集整理的这篇文章主要介绍了javascript – Django:从QueryDict读取JSON对象的数组前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何通过 AJAX调用从JS和服务器端传递复合 JSON结构,将其作为python中的“非常相似”的数据结构读取?

我知道可以使用json格式化(simplejson等),但是我以某种方式感觉到QueryDict本身在我的情况下是格式错误的或重新格式化的?

例:

当通过AJAX向Django视图传递JSON对象[{“id”:1},{“id”:2},{“id”:3})的数组时,QueryDict的格式为:

POST:<QueryDict: {u'json_data[0][id]': [u'1'],u'type': [u'clone'],u'csrfmiddlewaretoken': [u'69bb3c434ced31ab301ede04bf491ec0'],u'json_data[1][id]': [u'2'],u'json_data[2][id]': [u'3']}>

如何通过json_data进行迭代?

我想得到这样的东西:

POST:<QueryDict: {u'json_data': [{u'id': [u'1']},{u'id': [u'2']},{u'id': [u'3']}]},u'type': [u'clone']>

所以我可以使用QueryDict作为字典,并将json_data作为列表检索,并以一定的顺序进行处理:也许只需按顺序列表顺序遍历它们.
就像是:

ret = request.POST
for item in ret['json_data']:
    process(item['id'])

实际上,进入process()的值可能是另一个键值对的字典而不是一个数字(1,2,3等)

使用Javascript:

var test = [{"id": 1},{"id": 2},{"id": 3}];
$.post(
    "/insert_tc",{
      json_data: test,"type": 'clone',"csrfmiddlewaretoken": $csrf_token
    },function(json) {
        //CALLBACK
    },"json"
);

views.py:

def insert_tc(request):
    if request.method == 'POST':       
    ret = request.POST
    type = ret['type']
    list = ret.getlist(ret)

但是列表返回空[]

我尝试simplejson转储,加载,项目,获取方法,但没有一个帮助.

我甚至尝试jQuery.param(obj,true),但这不是我想要的(虽然有点接近).

有没有不同的/更好的方式来传递复合数据结构Django< - > JS通过AJAX?

解决方法

您应该使用JSON.stringify()来对JSON进行字符串化.这将将JSON对象转换为字符串格式,以便在另一端可以正确解析.另一方面,您将需要使用json.loads()来“取消对”该对象.

JavaScript的:

var test = [{"id": 1},{
      json_data: JSON.stringify(test),"json"
);

视图:

import json
def insert_tc(request):
    if request.method == 'POST':       
        ret = request.POST
        type = ret['type']
        list = json.loads(ret['json_data'])

猜你在找的JavaScript相关文章