2013-06-19 3 views
3

мне нужно сделать запрос следующим образом:Как разобрать вложенный объект json ajax в Django?

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?

ответ

2

Вы должны использовать JSON.stringify(), чтобы 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')) 
Смежные вопросы