2017-04-06 66 views
0

所以我送一个JSON看起来像这样:如何处理JSON来的QueryDict以JSON

[ 
    { 
    "Datum": "textholder1", 
    "Bedrag": "", 
    "Rekening": "", 
    "Tegenrekening": "", 
    "Naam": "", 
    "Omschrijving": "" 
    }, 
    { 
    "Datum": "textholder2", 
    "Bedrag": "", 
    "Rekening": "", 
    "Tegenrekening": "", 
    "Naam": "", 
    "Omschrijving": "" 
    } 
] 

要通过POST服务器,当我找回它,它看起来像这样:

{ 
    "json[1][Omschrijving]": [""], 
    "json[1][Rekening]": [""], 
    "json[0][Datum]": ["textholder1"], 
    "json[1][Tegenrekening]": [""], 
    "json[0][Rekening]": [""], 
    "json[0][Bedrag]": [""], 
    "json[0][Naam]": [""], 
    "json[1][Naam]": [""], 
    "json[0][Tegenrekening]": [""], 
    "json[1][Bedrag]": [""], 
    "json[0][Omschrijving]": [""], 
    "json[1][Datum]": ["textholder2"] 
} 

因此,您可以看到它将内部对象转换为json[index]而不是保持其格式。这是正常行为还是我在这里做错了?这是我如何检索数据:

inputData = request.POST 
userDataList = dict(inputData.lists()) 
print userDataList # prints the funny formatted JSON 
print type(userDataList) # dict 
print type(inputData) # django.http.request.QueryDict 

如何IM播种到服务器:

frm = $("#textCSVForm"); 
frm.submit(function(event) { 
    event.preventDefault() 
    $.ajax({ 
      url: frm.attr('action'), 
      type: frm.attr('method'), 
      dataType: '', 
      data: { 
       json: json.data 
      }, 
      beforeSend: function(xhr, settings) { 
       if (!csrfSafeMethod(settings.type) && !this.crossDomain) { 
        xhr.setRequestHeader("X-CSRFToken", csrftoken); 
       } 
      } 
     }) 
     .done(function(response) { 
     }) 
     .fail(function() {}) 
     .always(function() { 
      console.log(json.data); // logs the first formatted JSON 
     }); 
}); 
+0

为什么你把它转向到一个列表? – Rishav

+0

@Rishav你指的是''''.lists()'''?根据我的测试结果,输出有没有差异。但我没有特别的理由,为什么即时通讯使用''''.lists()'''我试过它,因为它有一个带有对象的数组。 – Kevin

+0

你如何将数据发送到服务器? – Rishav

回答

1

这里是你如何通过发送和接收的Django JSON。

Ajax调用是这样的:

var t = { 
    'foo': 1, 
    'bar': 2, 
}; 

$.ajax({ 
      url: 'localhost', 
      type: 'POST', 
      data: { 
       'data': JSON.stringify(t), 
      }, 
     }); 

而且Django的看法是这样的:

def test(request): 
    import json 
    print(json.loads(request.POST['data'])) 
    return HttpResponse('ok') 
+0

嗯我记得我尝试过这样的事情,然后我得到了同样的错误,因为即时获取'''MultiValueDictKeyError:'''json'“'''所以我只是放弃了这种方法(我几乎每一个尝试解决方案,我可以在网上找到,但没有工作),并尝试了以上的方式。但是,如果我设法解决这个multiValue错误,我应该得到正确的JSON格式? – Kevin

+0

@Kevin我刚刚测试了一种替代方法,它现在可以工作 – Rishav

+0

OMG这其实很聪明:D感谢您的解决方案! – Kevin