J'analyse quelques données à l'aide d'une classe de type dans mon contrôleur. Les données sont les suivantes:
{
"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"
}
J'ai essayé de stocker les données comme ça
var userData = _data;
var newData = JSON.parse(userData).data.userList;
Comment puis-je extraire la liste d'utilisateurs à une nouvelle variable?
Le JSON que vous avez posté a l'air bien, mais dans votre code, ce n'est probablement plus une chaîne JSON, mais déjà un objet JavaScript. Cela signifie qu’aucune analyse complémentaire n’est nécessaire.
Vous pouvez le tester vous-même, par exemple dans la console de Chrome:
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()
convertit l'entrée en une chaîne. La méthode toString()
des objets JavaScript par défaut renvoie [object Object]
, ce qui entraîne le comportement observé.
Essayez plutôt ce qui suit:
var newData = userData.data.userList;
Juste au-dessus de JSON.parse
, utilisez:
var newData = JSON.stringify(userData)
les premiers paramètres de la fonction JSON.parse
devraient être une chaîne, et vos données étant un objet JavaScript, elles seront donc converties en une chaîne [object object]
; vous devrez utiliser JSON.stringify
avant de transmettre les données.
JSON.parse(JSON.stringify(userData))
Ne jamais utiliser JSON.parse
sans l'envelopper dans le bloc try-catch
:
// 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
Eh bien, je voulais dire que je dois analyser un objet comme ceci: var jsonObj = {"first name" : "fname"}
. Mais je ne le fais pas vraiment. Parce que c'est déjà un JSON.
Une erreur 'O' inattendue est générée lorsque les données JSON ou String sont analysées.
Si c'est une chaîne, c'est déjà stringfied. L'analyse se termine avec une erreur 'O' inattendue.
J'ai fait face à la même chose (mais dans un contexte différent), j'ai résolu l'erreur suivante en supprimant JSON Producer.
@POST
@Produces({ **MediaType.APPLICATION_JSON**})
public Response login(@QueryParam("agentID") String agentID , Officer aOffcr ) {
return Response.status(200).entity("OK").build();
}
La réponse contient "OK" string return. L'annotation marquée comme @Produces ({** MediaType.APPLICATION_JSON }) ** essaie d'analyser la chaîne au format JSON, ce qui entraîne Unvisible 'O'.
Supprimer @Produces ({ MediaType.APPLICATION_JSON }) fonctionne correctement . Résultat:OK
Attention: De plus, côté client, si vous faites une requête ajax et utilisez JSON.parse ("OK"), un jeton inattendu sera lancé:
Oest la première lettre de la chaîne
JSON.parse (objet) compare avec jQuery.parseJSON (objet);
JSON.parse ('{"nom": "Yergalem", "ville": "Douvres"}'); --- Fonctionne bien