2017-06-07 1 views
1

Ich habe versucht, herauszufinden, wie man eine OData-Antwort in Javascript für ein paar Tage richtig erhalten. Das Problem ist, dass die Antwort als ein Array statt JSON formatiert ist, so dass die Funktion JSON.parse(mydata) nicht mit den Daten funktioniert, die ich erhalte.OData gibt Array statt JSON zurück - Wie konvertiert man?

Meine Frage ist zweifach: Was ist der richtige Weg ist OData fordern Sie eine Antwort als JSON zu senden und/oder wie kann ich mein aktuelles Antwortformat JSON sein? Hier

ist der Code, den ich verwende:

$.ajax({ 
       type: "GET", 
       url: requestUri, 
       dataType: "script", 
       accept: "application/json", 
       success: function(data, request) { 
        var jsonData = JSON.parse(data); 
       }, 
       error: function(msg) { 
        alert(msg); 
       }}) 

Hier ist ein Beispiel Antwort der Protokollierung die Variable data mit console.log:

{"@odata.context":"http://localhost:5001/odata/$metadata#Movies","value":[{"Title":"Pulp Fiction","Genre":"Action","RunTime":0,"Sales":0,"Key":2}]}

+0

Mögliche Duplikat [Konvertieren JS Objekt JSON string] (https://stackoverflow.com/questions/4162749/convert-js -object-to-json-string) – Brian

+0

@Brian Ich habe mich wirklich mehr gefragt, ob meine OData-Anfrage falsch war und diese Frage nichts mit OData zu tun hat. – sczapuchlak

Antwort

-1

Sie können es auf eine Variable hinzufügen und es einfach so zugreifen.

var v={"@odata.context":"http://localhost:5001/odata/$metadata#Movies","value":[{"Title":"Pulp Fiction","Genre":"Action","RunTime":0,"Sales":0,"Key":2}]}; 
//v.value[0] is a json object 
console.log(v.value[0]); 

oder überspringen die Zuordnung ganz und Zugriff auf diese Art und Weise:

data.value[0] 
data.value[0].Genre 
data.value[0].RunTime 
etc.... 
+0

Danke, dieses zweite Beispiel ist genau das, was ich gesucht habe. Du bist ein Lebensretter! – sczapuchlak

2

Das Problem ist die Antwort formatiert als Array anstelle von JSON

Es kann nicht sein. Sie können "ein Array" nicht über HTTP senden. Sie müssen es irgendwie kodieren ... z.B. als JSON.

jQuery wird, außer Sie überschreiben es mit der dataType Option, verwenden Sie die Content-Type HTTP-Antwort-Header, um zu bestimmen, wie die Daten codiert sind. Wenn es JSON ist, wird es den JSON analysieren.

Der Wert von data ist, was Sie erhalten würden, wenn Sie die rohe responseText lesen und durch JSON.parse übergeben.

Also nur nicht versuchen, es manuell zu analysieren. jQuery hat es für dich getan.

den Schritt überspringen:

var jsonData = JSON.parse(data); 

... und nur mit data arbeiten.

NB: Die Ausgabe von JSON.parse ist ein Objekt, ein Array oder einem anderen Datentyp JavaScript. JSON-Daten erhalten Sie von JSON.stringify.

+0

wert zu erwähnen, dass die erwarteten Daten liegen in 'data.data' – baao

+0

ich hatte keine Ahnung, dass der Datentyp überschreibt ändern. Das hat enorm geholfen, danke! – sczapuchlak

+0

@baao meinst du 'data.value'? – sczapuchlak

Verwandte Themen