Comme cela a été démontré dans cette jsfiddle , si vous avez un fichier JS et que vous créez un objet JSON sans l'utiliser, il se comporte différemment selon que les clés (membres) sont enroulées entre guillemets ou non.
Code valide: { a: 1};
Code invalide: { "a": 1 };
Ce que vous obtiendrez est un message d'erreur (en Chrome, différent pour FF / IE, mais échoue toujours sur la syntaxe)
Uncaught SyntaxError: jeton inattendu:
- Comment puis-je formater un nombre entier à une longueur spécifique dans javascript?
- Puis-je rompre avec le débogueur sur toutes les modifications apportées à un élément DOM?
- Onclick vs addEventListener
- Envoi de pièces jointes avec Meteor.js (package de messagerie et / ou nodemailer ou autrement)
- Backbone: plusieurs modèles de vue pour le même modèle
Mais si vous utilisez l'objet d'une façon ou d'une autre, par exemple: alert({ "a": 1 });
Tout recommence.
Pourquoi cela se produit-il?
La déclaration:
{ a: 1 };
N'est pas un objet littéraire. C'est une déclaration de bloc avec une expression marquée. C'est valide.
Ce:
{ "a": 1 };
Est une erreur de syntaxe car il n'est tout simplement pas possible d'être analysé. Le "a" cité commence une déclaration d'expression à l'intérieur du bloc, mais le jeton suivant après que la chaîne est en deux points, et il n'y a pas de forme d'expression qui ressemble à une expression suivie d'un colon.
À présent:
var x = { "a": 1 };
Fonctionne car "{" n'est pas interprété comme le début d'une déclaration de bloc. Cette déclaration commence par var
, donc c'est une déclaration variable. Dans l'expression sur le côté droit du jeton "=", la seule chose qu'un "{" peut signifier est le début d'un objet littéral. De même, notez que:
({ "a": 1 });
Est OK parce que la parenthèse d'ouverture fait que l'analyseur s'attend à une sous-expression imbriquée, de sorte que le "{" signifie sans ambages que c'est le début d'un objet littéraire.
Cette erreur peut apparaître lorsque vous effectuez un appel jsonp
AJAX à l'aide de jsonp
lorsque jsonp
n'est pas nécessaire. Essayez de changer votre type de données sur votre appel AJAX si tel est le cas pour le json
normal
$.ajax({ dataType: 'json', // try using json rather than json p ... });
Je viens de réaliser que lors du chargement du JSON via le require
et que le nom de fichier ne se termine pas sur .json
je reçois cette erreur. Renommer le fichier à bla.json
et ça marche bien.