2017-04-06 3 views
0

So bin das Senden ich eine JSON, das wie folgt aussieht:Wie JSON zu handhaben zu JSON QueryDict

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

an den Server via POST und wenn ich es abrufen, sieht es wie folgt aus:

{ 
    "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"] 
} 

So wie Sie sehen können, wandelt es die inneren Objekte in json[index] um, anstatt sein Format zu behalten. Ist das normales Verhalten oder mache ich hier etwas falsch? Dies ist, wie ich die Daten abrufen:

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 

Wie im Seeding auf dem Server:

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

Warum Sie es auf eine Liste drehen? – Rishav

+0

@Rishav beziehen Sie sich auf die '' '.lists()' ''? Es gibt keinen Unterschied in der Ausgabe mit oder ohne es nach meinen Testergebnissen. Aber ich habe keinen besonderen Grund, warum ich '' '.lists()' '' Ich habe es versucht, weil es ein Array mit Objekten ist. – Kevin

+0

Wie senden Sie die Daten an den Server? – Rishav

Antwort

1

Hier ist, wie Sie JSON durch Django senden und empfangen.

Ajax-Aufruf wie folgt aus:

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

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

Und Django Ansicht wie folgt aus:

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

hmm ich erinnere mich, ich versuchte so etwas, und dann habe ich den gleichen Fehler wie ich bekomme jetzt '' 'MultiValueDictKeyError: '' json '" '' 'so habe ich nur diese Methode (ich versuchte fast jeden Lösung, die ich online finden konnte, aber keine funktionierte) und versuchte den Weg, wie ich oben getan habe. Aber wenn ich diesen multiValue Fehler beheben kann, sollte ich das JSON korrekt formatiert bekommen? – Kevin

+0

@Kevin Ich habe gerade eine alternative Methode getestet und es funktioniert jetzt – Rishav

+0

OMG das ist eigentlich schlau: D danke für deine Lösung! – Kevin