J'analyse quelques données en utilisant une classe de type dans mon contrôleur.J'obtiens des données comme suit:
{
"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 extraire la liste des utilisateurs vers une nouvelle variable?
javascript
angularjs
json
Soniya Mohan
la source
la source
JSON.parse
. Essayez de l'utiliseruserData
directement comme objet.console.log(typeof userData)
s'affiche,object
vous avez déjà un objet javascript et non une chaîne JSON que vous devez analyser.Unexpected token o in JSON
, vous essayez probablement d'analyser un objet qui est déjà sous forme analysée.Réponses:
Le JSON que vous avez publié semble correct, mais dans votre code, il ne s'agit probablement plus d'une chaîne JSON, mais déjà d'un objet JavaScript. Cela signifie qu'aucune analyse n'est nécessaire.
Vous pouvez le tester vous-même, par exemple dans la console de Chrome:
JSON.parse()
convertit l'entrée en une chaîne. LatoString()
méthode des objets JavaScript par défaut retourne[object Object]
, ce qui entraîne le comportement observé.Essayez plutôt ce qui suit:
la source
les premiers paramètres de la fonction
JSON.parse
doivent être une chaîne et vos données sont un objet JavaScript, elles seront donc converties en chaîne[object object]
, vous devez utiliserJSON.stringify
avant de transmettre les donnéesla source
Ne l'utilisez jamais
JSON.parse
sans l'envelopper dans untry-catch
bloc:la source
Juste au dessus
JSON.parse
, utilisez:la source
JSON.stringify()
convertit un objet JavaScript en une représentation sous forme de chaîne, ce qui est le contraire de ce queJSON.parse()
fait. Vous obteniez leSyntaxError
parce que vous essayiez d'analyser quelque chose qui était déjà un objet. Dans la solution de @ Sukhchain, il est converti en une chaîne pour éviter cela.JSON.parse()
trop de manière redondante. Même s'il s'agit d'un processus assez rapide, l'analyse de JSON est effectuée de manière synchrone et peut potentiellement bloquer votre interface utilisateur, je vous déconseille donc de l'utiliser. Au lieu de cela, vous pouvez vérifier si votre variable est un objet, par exemple en utilisanttypeof(userData) === 'object'
avant d'essayer de l'analyser.Eh bien, je voulais dire que je dois analyser objet comme ceci:
var jsonObj = {"first name" : "fname"}
. Mais je ne le fais pas vraiment. Parce que c'est déjà un JSON.la source
Nous pouvons également ajouter des vérifications comme ceci:
la source
Une erreur 'O' inattendue est générée lorsque des données JSON ou une chaîne sont analysées.
Si c'est une chaîne, c'est déjà une chaîne. L'analyse se termine par une erreur «O» inattendue.
J'ai fait face à la même chose (bien que dans un contexte différent), j'ai résolu l'erreur suivante en supprimant JSON Producer.
La réponse contient un retour de chaîne "OK" . L'annotation marquée @Produces ({** MediaType.APPLICATION_JSON }) ** essaie d'analyser la chaîne au format JSON, ce qui entraîne un «O» inattendu .
La suppression de @Produces ({ MediaType.APPLICATION_JSON }) fonctionne correctement . Sortie: OK
Attention: également, côté client, si vous effectuez une requête ajax et utilisez JSON.parse ("OK"), il jette un jeton inattendu 'O'
O est la première lettre de la chaîne
JSON.parse (objet) se compare à jQuery.parseJSON (objet);
JSON.parse ('{"nom": "Yergalem", "ville": "Douvres"}'); --- Fonctionne bien
la source