251 votes

Quelle est la différence entre JSON et Object Literal Notation?

Quelqu'un peut-il me dire quelle est la principale différence entre un objet JavaScript défini en utilisant "Object Literal Notation" et un objet JSON ?

Selon un livre JavaScript, il s'agit d'un objet défini à l'aide de la notation d'objet :

 var anObject = {
    property1 : true,
    showMessage : function (msg) { alert(msg) }
};
 

Pourquoi n'est-ce pas un objet JSON dans ce cas? Juste parce qu'il n'est pas défini en utilisant des guillemets?

287voto

Felix Kling Points 247451

Le mieux est de lire la documentation.


Les principales différences:

  • Les clés doivent être des chaînes de caractères (c'est à dire entre guillemets ") en JSON.
  • Les valeurs peuvent être:
    • une chaîne de caractères
    • un certain nombre
    • un (JSON) objet
    • un tableau
    • true
    • false
    • null

Donc dans votre exemple, il n'est pas JSON à cause de trois raisons:

  1. Vos clés ne sont pas des chaînes.
  2. Vous ne pouvez pas affecter une fonction comme une valeur à un objet JSON.
  3. Vous définissez un objet JavaScript. Le cas échéant, un "objet JSON" ne peut être contenue dans une chaîne de caractères. Seulement parce que l'objet littéral notation JSON look similaire, cela ne signifie pas que vous pouvez les nommer de façon interchangeable. Voir aussi Il n'y a pas une telle chose comme un "Objet JSON".

Edit: Ajout de la différence la plus importante ;))

48voto

Quentin Points 325526

JSON a une syntaxe beaucoup plus limitée, y compris:

  • Les valeurs clés doivent être citées
  • Les chaînes doivent être citées avec " et non '
  • Vous avez une plage de valeurs plus limitée (par exemple, aucune fonction autorisée)

19voto

Nick Perkins Points 2431

Il n'y a vraiment aucune une telle chose comme un "Objet JSON".

La spécification JSON est une syntaxe pour le codage des données sous forme de chaîne. Ce que les gens appellent un "Objet JSON" ( en javascript ) est vraiment juste un ordinaire objet javascript qui a (probablement) été désérialisé à partir d'une chaîne JSON valide, et peut être facilement ré-sérialisé comme une chaîne JSON valide. En général, cela signifie qu'il ne contient que des données ( et non des fonctions ). Cela signifie également qu'il n'existe pas de dates, parce que JSON n'ont pas de type date ( probablement le plus douloureux chose à propos de JSON ;)

En outre, (côte-coup de gueule...) quand les gens parlent d'un "Objet JSON", ils ont presque toujours dire des données qui a "bouclé-accolades" au haut-niveau. Cela correspond bien à l'objet javascript. Toutefois, la spécification JSON n'exige pas qu'un seul "curly-accolades" objet le plus haut niveau d'une chaîne JSON. Il est parfaitement JSON valide pour avoir une liste au le haut-niveau, ou même juste une seule valeur. Ainsi, alors que chaque "Objet JSON" correspond à JSON valide, non valide tous les chaînes JSON correspondent à ce que nous appelons un "Objet JSON"! ( parce que la chaîne pourrait représenter une liste ou d'une valeur atomique )

10voto

MattDiPasquale Points 23842

Selon JSON JavaScript,

JSON est un sous-ensemble de l'objet la notation littérale de JavaScript.

En d'autres termes, JSON valide est également valable JavaScript object notation littérale, mais pas nécessairement dans l'autre sens.

En plus de la lecture de la documentation, comme @Filix Roi suggéré, je propose également de jouer avec les JSONLint en ligne JSON validateur. C'est ainsi que j'ai appris que les clés des objets JSON doivent être des chaînes de caractères.

1voto

pencilCake Points 9155

Autant je comprends la différence principale est la flexibilité.

JSON est une sorte de wrapper sur "JavaScript Object Notation", qui oblige les utilisateurs à obéir à plusieurs règles strictes pour définir les objets. Et ce, en limitant les objet de la déclaration les moyens fournis par JavaScript Object Notation fonctionnalité.

En conséquence, nous avons un moyen plus simple et plus standardisée des objets qui convient le mieux à l'échange de données entre plates-formes.

Donc, fondamentalement, les newObject dans mon exemple ci-dessus est un objet défini à l'aide de JavaScript Objeect Notation; mais il n'est pas "valable" objet JSON, car il ne suit pas les règles que JSON normes exigent.

Ce lien est également très utile: http://msdn.microsoft.com/en-us/library/bb299886.aspx

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