241 votes

Objet JavaScript Vs JSON

Je veux comprendre les différences fondamentales entre l'objet Javascript et JSON chaîne.

Disons que je créer les suivants JS variable:

var testObject = {one: 1,"two":2,"three":3};

T1. Est la clé/nom de la propriété valide à la fois avec/sans les guillemets? (par exemple, "one" : 1)

Si oui, quelle est la différence?

Q2: Si je convertir le au-dessus de l'objet à l'aide de JSON.stringify(testObject), quelle est la différence entre l'original JS objet et le JSON?

Je crois qu'ils en sont presque les mêmes. Merci de revenir sur ce point.

Q3: Pour l'analyse d'une chaîne JSON, est la méthode ci-dessous recommandé?

var javascriptObj = JSON.parse(jSonString);

276voto

Matt Points 38395
  1. Est la clé/nom de la propriété valide à la fois avec/sans les guillemets ?

    Le seul moment où vous devez placer une clé entre guillemets lors de l'utilisation de l'Objet de la notation Littérale est où la clé contient un caractère spécial (if, :, - etc). Il est intéressant de noter qu'une clé en JSON doit être entre double guillemets.

  2. Si je convertir le au-dessus de l'objet JSON à l'aide de var jSonString = JSON.stringify(testObject);, quelle est la différence entre les 2 (JS obj et JSON)?

    JSON est un format d'échange de données. C'est une norme qui décrit comment des listes ordonnées et non ordonnées des cartes, des cordes les booléens et les nombres peuvent être représentés dans une chaîne de caractères. Tout comme XML et YAML est un moyen de transmettre de l'information structurée entre les langues, JSON est le même. Un objet JavaScript sur l'autre main est un type physique. Tout comme un tableau PHP, C++ class/ struct, un objet JavaScript est un type interne à JavaScript.

    Voici une histoire. Imaginons que vous avez acheté des meubles dans un magasin, et vous souhaitez être livré. Cependant, le seul qui reste en stock est le modèle d'affichage, mais vous vous engagez à acheter.

    Dans la boutique, la poitrine de tiroirs que vous avez acheté est un objet vivant:

    var chestOfDrawers = {
        color: "red",
        numberOfDrawers: 4
    }
    

    Cependant, vous ne pouvez pas envoyer une poitrine de tiroirs dans le post, afin que vous les démonter (lire, stringify). Il est désormais inutile en termes de mobilier. Il est maintenant JSON. Son plat forme de la meute.

    {"color":"red","numberOfDrawers":4}
    

    Lorsque vous le recevrez, vous puis de reconstruire la poitrine de tiroirs (lire, l'analyser). Ses maintenant de retour dans une forme d'objet.

    La raison derrière JSON/ XML et YAML est de permettre le transfert de données entre les langages de programmation dans un format à la fois participer langues peuvent comprendre; vous ne pouvez pas donner de PHP ou C++ et JavaScript de votre objet directement, car chaque langue représente un objet différemment sous le capot. Cependant, parce que nous avons stringified l'objet en JSON notation; c'est à dire d'une manière standardisée pour représenter les données, nous pouvons transmettre le JSON de la représentation de l'objet à un autre language (C++, PHP), ils peuvent recréer l'objet JavaScript nous avons eu dans leur propre objet basé sur la représentation JSON de l'objet.

    Il est important de noter que JSON ne peut pas représenter les fonctions ou les dates. Si vous tentez de stringify un objet avec une fonction membre, la fonction doit être omis de la représentation JSON. Une date sera converti en chaîne de caractères;

    JSON.stringify({
        foo: new Date(),
        blah: function () { 
            alert('hello');
        }
    }); // returns the string "{"foo":"2011-11-28T10:21:33.939Z"}"
    
  3. Pour l'analyse d'une chaîne JSON, est la méthode ci-dessous recommandé? var javascriptObj = JSON.parse(jSonString);

    Oui, mais les anciens navigateurs ne prennent pas en charge JSON natif (IE <8). À l'appui de ces, vous devez inclure json2.js.

    Si vous utilisez jQuery, vous pouvez appeler jQuery.parseJSON(), qui utilisera JSON.parse() sous le capot si c'est pris en charge et, dans le cas contraire secours à une coutume de mise en œuvre pour analyser l'entrée.

32voto

Ben Lee Points 25935

Q1: Lors de la définition des littéraux d'objet en javascript, les clés peuvent inclure des guillemets ou pas. Il n'y a pas de différence, sauf que des citations vous permettent de spécifier certaines touches qui serait la cause de l'interprète ne parviennent pas à analyser si vous avez essayé d'eux nus. Par exemple, si vous vouliez une clé qui était juste un point d'exclamation, vous auriez besoin de citations:

a = { "!": 1234 } // Valid
a = { !: 1234 } //  Syntax error

Dans la plupart des cas, vous pouvez omettre les guillemets autour des touches sur l'objet de littéraux.

Q2: JSON est littéralement une représentation sous forme de chaîne. C'est juste une chaîne de caractères. Donc, considérez ceci:

var testObject = { hello: "world" }
var jSonString = JSON.stringify(testObject);

Depuis testObject est un objet réel, vous pouvez appeler propriétés sur elle et de faire autre chose que vous pouvez faire avec les objets:

testObject.hello => "world"

D'autre part, jsonString est juste une chaîne de caractères:

jsonString.hello => undefined

Noter une autre différence: En JSON, toutes les clés doivent être indiqués. Qui contraste avec les littéraux d'objet, d'où les guillemets peuvent généralement être omise que par mon explication en T1.

T3. Vous pouvez analyser une chaîne JSON en utilisant JSON.parse, et c'est généralement la meilleure façon de le faire (si le navigateur ou un cadre en contient). Vous pouvez aussi simplement utiliser eval depuis JSON est valable du code javascript, mais la première méthode est recommandée pour un certain nombre de raisons (eval a beaucoup de méchants problèmes associés).

7voto

Alnitak Points 143355

Q1 - en JS, vous devez uniquement utiliser les guillemets si la clé est un mot réservé ou si elle serait autrement un jeton non conforme. Dans JSON, vous devez toujours utiliser des guillemets doubles sur les noms de clés.

Q2 - la `` est une version sérialisé de l’objet en entrée...

Q3 - qui peuvent être sérialisés à un objet de recherche identiques utilisant``

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