web-dev-qa-db-fra.com

SyntaxError: Jeton inattendu o dans JSON à la position 1

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?

26
Soniya Mohan

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;
44
Timo

Juste au-dessus de JSON.parse, utilisez:

var newData = JSON.stringify(userData)
13
Sukhchain

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))
10
huruji

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
9
Kousha

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. 

2
М.Б.

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

0
Yergalem