web-dev-qa-db-fra.com

Quelles sont les différences entre l'utilisation de tableaux JSON et les objets JSON?

Quelles sont la différence et les avantages de l'utilisation des tableaux JSON:

{
   thing:[
     { },
     { }
   ]
}

par rapport aux objets JSON:

{
   thing:{
     { },
     { }
   }
}
43
antonpug

Pas pour sonner comme un cul intelligent, mais bon ...

La différence entre un array et un objectest que

Les objets sont configurés en utilisant un key et value comme ...

person.age = 15;

Si la valeur key est une variable, alors on pourrait y accéder comme ...

var key = "age";
alert(person[key]);

Les tableaux utilisent un index entier [1] et prennent une valeur.

player[1].score += 1000;

[1] Oui, je sais ... en Javascript, l'index entier est vraiment transformé en chaîne dans les coulisses. Ignore ça. Pensez à des tableaux prenant une valeur entière SURTOUT lorsque vous pensez à JSON.

30
Jeremy J Starcher

Objets - clé et valeur, tableaux - entier. Quand utilisez-vous ceci ou cela?

Je pense aux tableaux et aux objets comme "est un/an" et "a un" respectivement. Permet d'utiliser "Fruit" comme exemple.

Chaque élément de la gamme de fruits est un type de fruit.

array fruit : [orange, mango, banana]

. Les tableaux peuvent contenir des objets, des chaînes, des nombres, des tableaux, mais permettent de traiter uniquement les objets et les tableaux.

array fruit : [orange:[], mango:{}, banana:{}]

. Vous pouvez voir que l'orange est également un tableau. Cela implique que tout élément qui devient orange est un type d'orange, par exemple: bitter_orange, mandarin, sweet_orange.

pour un objet fruit, tout élément qu'il contient est un attribut de fruit. ainsi le fruit a un

object fruit :{seed:{}, endocarp:{},flesh:{}}

Cela implique également que tout ce qui se trouve dans l'objet graine doit être la propriété de la graine, par exemple: la couleur,

6
megyewodi

Les tableaux JSON représentent une collection d'objets. Dans JS, il y a un tas de fonctions de collection comme slice, pop, Push. Les objets ont juste plus de données brutes.

5
Daniel A. White

Le deuxième formulaire que vous affichez n'est en fait pas un JSON valide, car chacun des objets de l'objet "thing" aurait besoin d'une sorte ou d'un nom de propriété pour y accéder.

Pour répondre à votre question, la différence est que dans le premier cas, vous accéderez aux objets dans "chose" en utilisant un accès au tableau comme obj.thing[0] ou obj.thing[1]. Dans le deuxième cas, si vous aviez des déclarations de propriété appropriées, vous accéderiez comme obj.thing.property

Généralement, dans le tableau JSON, sont utilisés pour stocker un regroupement d'éléments similaires, tandis que les objets sont utilisés pour contenir le regroupement de différentes propriétés pour un seul élément.

5
Mike Brant

JSON est principalement un langage qui permet de sérialiser des objets javascript en chaînes. Ainsi, lors de la désérialisation d'une chaîne JSON, vous devez obtenir une structure d'objet javascript. Si votre json se désérialise en un objet qui stocke 100 objets appelés object1 à object100, cela va être très gênant. La plupart des désérialisateurs s'attendent à ce que vous ayez des objets connus et des tableaux d'objets connus afin qu'ils puissent convertir les chaînes en la structure d'objet réelle dans le langage que vous utilisez. C'est aussi une question à laquelle la philosophie du design orienté objet vous répondrait.

1
norbitheeviljester

Un objet JSON peut être transformé à l'aide de toJSON:

function kryptonite(key)
   {
   var replacement = {};
   for(var __ in this)
     {
     if(__ in alias)
       replacement[__] = this[__]
     }

   return replacement;
   }

var alias = {"Clark":"","phone":""};
var contact = {
               "Clark":"Kent",
               "Kal El":"Superman",
               "phone":"555-7777"
              }

contact.toJSON = kryptonite;

var foo = JSON.stringify(contact)

Un tableau JSON peut être transformé à l'aide de map:

 var contact = {
               "Clark":"Kent",
               "Kal El":"Superman",
               "phone":"555-7777",
               "home":[{"present":"Metropolis"},{"past":"Krypton"},{"future":"Phantom Zone"}]

              }

 var filter = {"past":"","future":""}

 function junction(value, index)
   {
   for (var __ in filter) if(value[__]) return value[__]
   } 

var island = contact.home.map(junction);
1
Paul Sweatte