wake-up-neo.com

SyntaxError: Unerwartetes Token o in JSON an Position 1

Ich analysiere wenige Daten mit einer Typenklasse in meinem Controller.

{  
   "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?

26
Soniya Mohan

Der von Ihnen gepostete JSON-Code sieht gut aus, ist jedoch in Ihrem Code höchstwahrscheinlich keine JSON-Zeichenfolge mehr, sondern bereits ein JavaScript-Objekt. Das bedeutet, dass keine Analyse mehr erforderlich ist.

Sie können dies selbst testen, z. in der Chrome-Konsole:

new Object().toString()
// "[object Object]"

JSON.parse(new Object())
// Uncaught SyntaxError: Unexpected token o in JSON at position 1

JSON.parse("[object Object]")
// Uncaught SyntaxError: Unexpected token o in JSON at position 1

JSON.parse() wandelt die Eingabe in einen String um. Die toString()-Methode von JavaScript-Objekten gibt standardmäßig [object Object] zurück, was zu dem beobachteten Verhalten führt.

Versuchen Sie stattdessen Folgendes:

var newData = userData.data.userList;
44
Timo

Direkt oberhalb von JSON.parse verwenden Sie:

var newData = JSON.stringify(userData)
13
Sukhchain

die ersten Parameter der Funktion JSON.parse sollten ein String sein und Ihre Daten sind ein JavaScript-Objekt. Daher werden sie in einen String [object object] konvertiert. Sie sollten JSON.stringify verwenden, bevor Sie die Daten übergeben

JSON.parse(JSON.stringify(userData))
10
huruji

Verwenden Sie niemals JSON.parse, ohne es in try-catch-Block einzuwickeln:

// payload 
let userData = null;

try {
    userDate = JSON.parse(payload); 
} catch (e) {
    // You can read e for more info
    // Let's assume the error is that we already have parsed the payload
    // So just return that
    userData = payload;
}

// Now userData is the parsed result
9
Kousha

Nun, ich meinte, dass ich ein Objekt wie folgt analysieren muss: var jsonObj = {"first name" : "fname"}. Aber eigentlich nicht. Weil es schon ein JSON ist. 

2
М.Б.

Unerwarteter 'O'-Fehler wird ausgelöst, wenn JSON-Daten oder -String analysiert werden.

Wenn es ein String ist, ist es bereits stringfied. Die Analyse endet mit einem unerwarteten 'O'-Fehler.

Ich sah mich ähnlich an (obwohl in einem anderen Kontext), ich löste den folgenden Fehler, indem ich JSON Producer entfernte.

    @POST
    @Produces({ **MediaType.APPLICATION_JSON**})
    public Response login(@QueryParam("agentID") String agentID , Officer aOffcr ) {
      return Response.status(200).entity("OK").build();

  }

Die Antwort enthält "OK" string return. .__ Die mit @Produces ({** MediaType.APPLICATION_JSON }) ** gekennzeichnete Annotation versucht, die Zeichenfolge im JSON-Format zu parsen, was zu Unerwartetem 'O' führt.

@Produces entfernen ({ MediaType.APPLICATION_JSON }) funktioniert einwandfrei . Ausgabe:OK

Achtung: Auch wenn Sie auf der Clientseite eine Ajax-Anfrage machen und JSON.parse ("OK") verwenden, wird Unerwartetes Token 'O' ausgegeben.

Oist der erste Buchstabe der Zeichenfolge

JSON.parse (object) vergleicht mit jQuery.parseJSON (object);

JSON.parse ('{"name": "Yergalem", "city": "Dover"}'); --- Funktioniert gut

0
Yergalem