116 votes

Erreur de caractère inattendu dans JSON.parse

Je reçois cette erreur :

JSON.parse : caractère inattendu

lorsque j'exécute cette déclaration dans firebug :

JSON.parse({"balance":0,"count":0,"time":1323973673061,"firstname":"howard","userId":5383,"localid":1,"freeExpiration":0,"status":false});

Pourquoi en est-il ainsi ? La chaîne JSON me semble correcte et je l'ai également testée avec JSHint. L'objet transmis dans le cas ci-dessus est une réponse du serveur dont le type de contenu est défini comme suit application/json

226voto

KennyTM Points 232647

Vous n'analysez pas une chaîne, mais un objet déjà analysé :)

var obj1 = JSON.parse('{"creditBalance":0,...,"starStatus":false}');
//                    ^                                          ^
//                    if you want to parse, the input should be a string 

var obj2 = {"creditBalance":0,...,"starStatus":false};
// or just use it directly.

0 votes

J'ai envie de voter pour la première phrase, mais pourquoi répéter ?

1 votes

@MarcelKorpel, Mathletics : Exact. Mis à jour.

0 votes

@Mathletics De l'avis général, JSON.parse fait un contrôle de sécurité. N.T.

40voto

ScrapCode Points 962

Vous pouvez vous assurer que l'objet en question est stringifié avant de le passer à la fonction parse en utilisant simplement JSON.stringify() .

Mise à jour de votre ligne ci-dessous,

JSON.parse(JSON.stringify({"balance":0,"count":0,"time":1323973673061,"firstname":"howard","userId":5383,"localid":1,"freeExpiration":0,"status":false}));

ou si vous avez du JSON stocké dans une variable :

JSON.parse(JSON.stringify(yourJSONobject));

4 votes

JSON.stringify est le patron.

0voto

Nalan M Points 834

Si la chaîne JSON du serveur est correcte, alors.., Vérifiez les trois points suivants,

  1. Vérifiez que l'URL de GetJSON ou de tout autre appel Ajax est la bonne.
  2. Assurez-vous que la ligne, dataType : "json" dans votre appel ajax
  3. Vérifiez que vous avez correctement chargé le fichier jQuery.

-1voto

atomh33ls Points 2461

Ce n'est pas vrai pour le PO, mais cette erreur peut être causée par l'utilisation de guillemets simples ( ' ) au lieu de double ( " ) pour les chaînes de caractères.

El Spécifications JSON requiert des guillemets doubles pour les chaînes de caractères.

Par exemple

JSON.parse(`{"myparam": 'myString'}`)

donne l'erreur, tandis que

JSON.parse(`{"myparam": "myString"}`)

ne le fait pas. Notez les guillemets autour de myString .

En rapport : https://stackoverflow.com/a/14355724/1461850

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X