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.parse
moeten een tekenreeks zijn en uw gegevens zijn een JavaScript-object, dus het wordt geconverteerd naar een tekenreeks [object object]
, u moet JSON.stringify
gebruiken voordat u de gegevens doorgeeft
JSON.parse(JSON.stringify(userData))
Antwoord 3, autoriteit 10%
Gebruik JSON.parse
nooit 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 string
is:
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);