@AndreasN is correct: le JSON specification dicte l'utilisation de guillemets pour qu'il soit réellement JSON. Si vous n'utilisez pas de guillemets, il peut s'agir d'un littéral d'objet valide en Javascript, mais ce n'est pas JSON. D'autres services que Javascript utilisent JSON (par exemple, webservices utilisant php, Java, etc.) et si vous construisez une chaîne sans guillemets, il n'y a aucune garantie qu'elle sera correctement analysée - même si je pense que la plupart des implémentations seront assez robuste pour le faire.
FYI il est dangereux en Javascript d'utiliser directement eval() sur les chaînes JSON à partir de sources dont vous ne pouvez pas empêcher les attaques malveillantes. Encore une fois, voir le JSON site qui donne plus d'une explication ainsi qu'un très court fichier javascript qui analyse en toute sécurité les chaînes JSON dans les objets Javascript.
modifier: Je suppose que techniquement votre question initiale est pas JSON mais la syntaxe de Javascript pour littéraux objet. La différence est que les objets constructible d'une chaîne JSON exclura beaucoup d'autres objets littéraux possibles, par exemple:
var a = {cat: "meow", dog: "woof"};
var aname = {cat: "Garfield", dog: "Odie"};
var b = {
counter: 0,
pow: function(x) { return x+1; },
zap: function(y) { return (counter += y); }
};
var c = {
all: [a,aname],
animals: a,
names: aname,
};
objet littéraux « a » et « aname » peut être exprimé en JSON (en ajoutant des guillemets pour les noms de propriétés) . Mais les littéraux d'objet "b" et "c" ne le peuvent pas. Le littéral d'objet "b" contient des fonctions (non autorisées dans JSON). Le littéral d'objet "c" ci-dessus contient des références à d'autres variables d'une manière qui n'est pas représentable dans JSON car certaines références sont partagées. Si vous modifiez c.names
, il changera également c.all[1]
car ils partagent une référence à la même variable. JSON peut uniquement exprimer des objets ayant une structure arborescente (par exemple, chaque sous-élément de l'objet global est indépendant).
IE le fait aussi bien. Même IE6 l'accepte. – Tomalak
ouais, je n'ai pas remarqué de problèmes avec la méthode non cotée – nickf