Erreur de caractère inattendue JSON.parse

112

J'obtiens cette erreur:

JSON.parse: caractère inattendu

quand j'exécute cette instruction 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 avec le type de contenu défini surapplication/json

Krishna
la source

Réponses:

224

Vous n'analysez pas une chaîne, vous analysez 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.
KennyTM
la source
Je veux voter pour la première phrase, mais pourquoi voudriez-vous réanalyser?
Mathletics
1
@MarcelKorpel, Mathletics: C'est vrai. Actualisé.
kennytm
@Mathletics Par tous les comptes JSON.parse effectue des vérifications de sécurité. NT
BF
5
C'est hilarant. Aimer. <3
Darth Egregious
1
Je ne suis pas défini sur data.results (les données sont un objet JSON). Stack me dit d'en faire un objet js par data = JSON.parse (data). Mais j'obtiens une erreur de caractère inattendue JSON.parse.
KasparTr
35

Vous pouvez vous assurer que l'objet en question est stringifié avant de le passer à la fonction d'analyse 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 JSON stocké dans une variable:

JSON.parse(JSON.stringify(yourJSONobject));
ScrapCode
la source
3
JSON.stringify est le patron.
Kenmeister
-1

Ce n'est pas vrai pour l'OP, mais cette erreur peut être provoquée en utilisant des guillemets simples ( ') au lieu de double ( ") pour les chaînes.

La spécification JSON nécessite des guillemets doubles pour les chaînes.

Par exemple:

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

donne l'erreur, alors que

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

ne fait pas. Notez les guillemets autour myString.

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

atomh33ls
la source