SyntaxError: Onverwacht token o in JSON op positie 1

Ik ontleed weinig gegevens met behulp van een typeklasse in mijn controller. Ik krijg gegevens als volgt:

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

Ik heb geprobeerd de gegevens op deze manier op te slaan

var userData = _data;
var newData = JSON.parse(userData).data.userList;

Hoe kan ik de gebruikerslijst extraheren naar een nieuwe variabele?


Antwoord 1, autoriteit 100%

De JSON die je hebt gepost ziet er goed uit, maar in je code is het hoogstwaarschijnlijk geen JSON-tekenreeks meer, maar al een JavaScript-object. Dit betekent dat er niet meer geparseerd hoeft te worden.

Je kunt dit zelf testen, b.v. in de Chrome-console:

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()converteert de invoer naar een tekenreeks. De methode toString()van JavaScript-objecten retourneert standaard [object Object], wat resulteert in het waargenomen gedrag.

Probeer in plaats daarvan het volgende:

var newData = userData.data.userList;

Antwoord 2, autoriteit 29%

de eerste parameters van de functie JSON.parsemoeten een tekenreeks zijn en uw gegevens zijn een JavaScript-object, dus het wordt geconverteerd naar een tekenreeks [object object], u moet JSON.stringifygebruiken voordat u de gegevens doorgeeft

JSON.parse(JSON.stringify(userData))

Antwoord 3, autoriteit 10%

Gebruik JSON.parsenooit zonder het in een try-catch-blok te stoppen:

// payload 
let userData = null;
try {
    // Parse a JSON
    userData = 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

Antwoord 4, autoriteit 7%

Net boven JSON.parse, gebruik:

var newData = JSON.stringify(userData)

Antwoord 5

Er wordt een onverwachte ‘O’-fout gegenereerd wanneer JSON-gegevens of string toevallig worden geparseerd.

Als het een string is, is het al stringfied. Parsing eindigt met onverwachte ‘O’-fout.

Ik had vergelijkbare problemen (hoewel in een andere context), ik heb de volgende fout opgelost door JSON Producer te verwijderen.

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

Het antwoord bevat ‘OK’tekenreeksretour.
De annotatie gemarkeerd als @Produces({ **MediaType.APPLICATION_JSON})** probeert de tekenreeks te ontleden naar JSON-indeling, wat resulteert in Onverwachte ‘O’.

Het verwijderen van @Produces({ MediaType.APPLICATION_JSON})werkt prima.
Uitvoer: OK

Pas op:
Als u aan de clientzijde een ajax-verzoek indient en JSON.parse (“OK”) gebruikt, wordt het onverwachte token ‘O’ gegooid

Ois de eerste letter van de tekenreeks

JSON.parse(object) vergelijkt met jQuery.parseJSON(object);

JSON.parse(‘{ “name”:”Yergalem”, “city”:”Dover”}’); — Werkt prima


Antwoord 6

Nou, ik bedoelde dat ik het object als volgt moet ontleden: var jsonObj = {"first name" : "fname"}. Maar eigenlijk niet. Omdat het al een JSON is.


Antwoord 7

We kunnen ook de volgende cheques toevoegen:

function parseData(data) {
    if (!data) return {};
    if (typeof data === 'object') return data;
    if (typeof data === 'string') return JSON.parse(data);
    return {};
}

Antwoord 8

Je kunt eenvoudig het typeof userData& JSON.parse()alleen als het stringis:

var userData = _data;
var newData;
if (typeof userData === 'object')
  newData = userData.data.userList; // dont parse if its object
else if (typeof userData === 'string')
  newData = JSON.parse(userData).data.userList; // parse if its string

Antwoord 9

Geef een poging, zoals dit, dit zal het parseren als het strikte of anders de standaardwaarde

neemt

let example;
   try {
   example  = JSON.parse(data)
  } catch(e) {
    example = data
  }

Antwoord 10

VAR-gegevens = JSON.parse (UserData);
console.log (gegevens);

Other episodes