我需要提出如下请求:
var url="http://127.0.0.1:8080/simulate/";
$.ajax({
url: url,
type: 'POST',
data:{ student_num:10,
company_num:10,
students:"",
csrfmiddlewaretoken:'{{csrf_token}}',
companies:[{weight:10},{weight:11},{weight:9}]
},
success: function(data, textStatus, xhr) {
var text=xhr.responseText
console.log(text)
}
});
但是这样,request.POST
对象没有将companies
组织成嵌套的json数组。相反,它将它变为2D数组,如下所示:
<QueryDict: {u'student_num': [u'10'], u'students': [u''], u'companies[2][weight]': [u'9'], u'companies[1][weight]': [u'11'], u'company_num': [u'10'], u'companies[0][weight]': [u'10'], u'csrfmiddlewaretoken': [u'RpLfyEnZaU2o4ExxCVSJkTJ2ws6WoPrs']}>
通过这种方式,我觉得很难将companies
重新组织成一个对象列表。我查了一些其他问题,有人说我们应该这样做:
companies:"[{weight:10},{weight:11},{weight:9}]"
然后使用json.loads
将字符串解析回对象列表。但是如果我使用这样的代码,我会不断得到解析错误:
company_array = request.POST['company_array']
company_array = json.loads(company_array)
或者这个:
company_array = json.load(StringIO(company_array))
那么处理嵌套JSON对象的正确方法应该是什么?
答案 0 :(得分:2)
您应该在发送数据之前使用JSON.stringify()对数据进行字符串化:
$.ajax({
url: url,
type: 'POST',
data: { data: JSON.stringify({ student_num:10,
company_num:10,
students:"",
csrfmiddlewaretoken:'{{csrf_token}}',
companies:[{weight:10},{weight:11},{weight:9}]
}) },
success: function(data, textStatus, xhr) {
var text=xhr.responseText
console.log(text)
}
});
然后您可以在服务器端使用json.loads()
进行解析:
data = json.loads(request.POST.get('data'))
答案 1 :(得分:0)
答案 2 :(得分:0)
您可以尝试查看django-SplitJSONWidget-form并从中获得决定。