Ich analysiere nur wenige Daten mithilfe einer Typklasse in meinem Controller. Ich erhalte Daten wie folgt:
{
"data":{
"userList":[
{
"id":1,
"name":"soni"
}
]
},
"status":200,
"config":{
"method":"POST",
"transformRequest":[
null
],
"transformResponse":[
null
],
"url":"/home/main/module/userlist",
"headers":{
"rt":"ajax",
"Tenant":"Id:null",
"Access-Handler":"Authorization:null",
"Accept":"application/json, text/plain, */*"
}
},
"statusText":"OK"
}
Ich habe versucht, die Daten so zu speichern
var userData = _data;
var newData = JSON.parse(userData).data.userList;
Wie kann ich die Benutzerliste in eine neue Variable extrahieren?
javascript
angularjs
json
Soniya Mohan
quelle
quelle
JSON.parse
. Versuchen Sie esuserData
direkt als Objekt.console.log(typeof userData)
angezeigtobject
wird, haben Sie bereits ein Javascript-Objekt und keine JSON-Zeichenfolge, die Sie analysieren müssen.Unexpected token o in JSON
, versuchen Sie normalerweise , ein Objekt zu analysieren, das bereits in analysierter Form vorliegt.Antworten:
Der von Ihnen gepostete JSON sieht gut aus, in Ihrem Code handelt es sich jedoch höchstwahrscheinlich nicht mehr um eine JSON-Zeichenfolge, sondern bereits um ein JavaScript-Objekt. Dies bedeutet, dass kein Parsen mehr erforderlich ist.
Sie können dies selbst testen, z. B. in der Chrome-Konsole:
JSON.parse()
konvertiert die Eingabe in eine Zeichenfolge. DietoString()
Methode von JavaScript-Objekten wird standardmäßig zurückgegeben[object Object]
, was zu dem beobachteten Verhalten führt.Versuchen Sie stattdessen Folgendes:
quelle
Die ersten Funktionsparameter
JSON.parse
sollten ein String sein, und Ihre Daten sind ein JavaScript-Objekt. Sie werden daher in einen String konvertiert[object object]
, den SieJSON.stringify
vor dem Übergeben der Daten verwenden solltenquelle
Verwenden Sie es niemals,
JSON.parse
ohne es in einentry-catch
Block zu wickeln :quelle
Nur oben
JSON.parse
, zu verwenden:quelle
JSON.stringify()
konvertiert ein JavaScript-Objekt in eine Zeichenfolgendarstellung, was das Gegenteil von dem ist, was esJSON.parse()
tut. Sie haben das bekommen,SyntaxError
weil Sie versucht haben, etwas zu analysieren, das bereits ein Objekt war. In der Lösung von @ Sukhchain wird es in eine Zeichenfolge konvertiert, um dies zu vermeiden.JSON.parse()
zu viel redundant verwenden. Obwohl es ein ziemlich schneller Prozess ist, erfolgt das Parsen von JSON synchron und kann möglicherweise Ihre Benutzeroberfläche blockieren. Ich würde daher davon abraten, dies zu verwenden. Stattdessen können Sie überprüfen, ob Ihre Variable ein Objekt ist, z. B. mithilfe von,typeof(userData) === 'object'
bevor Sie versuchen, sie zu analysieren.Nun, ich meinte, dass ich ein Objekt wie folgt analysieren muss :
var jsonObj = {"first name" : "fname"}
. Aber das tue ich eigentlich nicht. Weil es schon ein JSON ist.quelle
Der unerwartete 'O'-Fehler wird ausgelöst, wenn JSON-Daten oder -Strings analysiert werden.
Wenn es ein String ist, ist er bereits stringfied. Das Parsen endet mit einem unerwarteten O-Fehler.
Ich sah mich ähnlich (obwohl in einem anderen Kontext), ich löste den folgenden Fehler durch Entfernen von JSON Producer.
Die Antwort enthält die Zeichenfolgenrückgabe "OK" . Die als @Produces ({** MediaType.APPLICATION_JSON }) ** gekennzeichnete Anmerkung versucht, die Zeichenfolge im JSON-Format zu analysieren, was zu einem unerwarteten 'O' führt. .
Das Entfernen von @Produces ({ MediaType.APPLICATION_JSON }) funktioniert einwandfrei . Ausgabe: OK
Achtung: Wenn Sie auf Client-Seite eine Ajax-Anfrage stellen und JSON.parse ("OK") verwenden, wird das unerwartete Token 'O' ausgegeben.
O ist der erste Buchstabe der Zeichenfolge
JSON.parse (Objekt) vergleicht mit jQuery.parseJSON (Objekt);
JSON.parse ('{"name": "Yergalem", "city": "Dover"}'); --- Funktioniert gut
quelle
Wir können auch Schecks wie diesen hinzufügen:
quelle