2017-04-06 41 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