305 votes

obtenir la taille de l'objet JSON

J'ai un objet JSON qui est renvoyé par une requête AJAX et j'ai des problèmes avec la fonction .length parce qu'il revient sans cesse undefined . Je me demande juste si je l'utilise correctement :

console.log(data.length);
console.log(data.phones.length);

Ils reviennent tous les deux undefined même s'il s'agit d'objets valides.

Mise à jour :
Exemple de l'objet JSON retourné :

{"reqStatus":true,"phones":{"one":{"number":"XXXXXXXXXX","type":"mobile"},"two":{"number":"XXXXXXXXXX","type":"mobile"}}}

0 votes

Pouvez-vous afficher un échantillon du JSON renvoyé ?

0 votes

Je ne suis pas sûr, ce n'était pas moi. Je pense que votre question est bonne, aussi bien.

716voto

Kasun Points 1337

Vous pouvez utiliser quelque chose comme ceci

var myObject = {'name':'Kasun', 'address':'columbo','age': '29'}

var count = Object.keys(myObject).length;
console.log(count);

70 votes

@Matt, Il n'est PAS obligatoire que chaque code fonctionne dans IE 7 ou 8. Ces plateformes inadéquates ou non standard qui sont protégées sont simplement des inconvénients.

5 votes

@OlofuMark tout le monde ne peut pas choisir le navigateur qu'il utilise (par exemple, les réseaux verrouillés, les dépendances DLL d'IE versionnées utilisées par les applications internes). Si la prise en compte de navigateurs obsolètes nécessite des efforts importants, il peut être justifié de les ignorer, mais dans un cas aussi trivial que celui-ci, il est tout simplement impoli de ne pas le faire.

7 votes

@OlofuMark Bien qu'il ne soit pas obligatoire de prendre en charge ces versions, les développeurs doivent savoir quand le code qu'ils produisent ne fonctionnera pas sur certaines versions afin de pouvoir décider s'ils doivent en tenir compte ou non.

55voto

tomfumb Points 1486

Votre problème est que votre objet phones n'a pas de propriété de longueur (à moins que vous ne la définissiez quelque part dans le JSON que vous renvoyez) car les objets ne sont pas identiques aux tableaux, même lorsqu'ils sont utilisés comme tableaux associatifs. Si l'objet phones était un tableau, il aurait une longueur. Vous avez deux options (peut-être plus).

  1. Modifiez votre structure JSON (en supposant que cela soit possible) pour que "phones" devienne

    "phones":[{"number":"XXXXXXXXXX","type":"mobile"},{"number":"XXXXXXXXXX","type":"mobile"}]

    (notez qu'il n'y a pas d'identifiant numéroté par mot pour chaque téléphone car ils sont renvoyés dans un tableau indexé sur 0). Dans cette réponse phones.length seront valables.

  2. Parcourez les objets contenus dans votre objet téléphone et comptez-les au fur et à mesure, par ex.

    var key, count = 0;
    for(key in data.phones) {
      if(data.phones.hasOwnProperty(key)) {
        count++;
      }
    }

Si vous ne ciblez que les nouveaux navigateurs, l'option 2 pourrait ressembler à ceci este

0 votes

Comment puis-je obtenir la longueur de l'objet JSON avec la première solution, étant donné que mon objet JSON est stocké dans une variable appelée jsonObject et que j'ai le même JSON que ci-dessus : "phones" :[{"number" : "XXXXXXXXXX", "type" : "mobile"},{"number" : "XXXXXXXXXX", "type" : "mobile"}]

37voto

kkk Points 33

Vous n'avez pas besoin de modifier votre format JSON.

remplacer :

console.log(data.phones.length);

avec :

console.log( Object.keys( data.phones ).length ) ;

30voto

ForestierSimon Points 225

Envisagez d'utiliser underscore.js . Il vous permettra de vérifier la taille, par exemple, comme ça :

var data = {one : 1, two : 2, three : 3};
_.size(data);
//=> 3
_.keys(data);
//=> ["one", "two", "three"]
_.keys(data).length;
//=> 3

19voto

surya handoko Points 334
var json=[{"id":"431","code":"0.85.PSFR01215","price":"2457.77","volume":"23.0","total":"565.29"},{"id":"430","code":"0.85.PSFR00608","price":"1752.45","volume":"4.0","total":"70.1"},{"id":"429","code":"0.84.SMAB00060","price":"4147.5","volume":"2.0","total":"82.95"},{"id":"428","code":"0.84.SMAB00050","price":"4077.5","volume":"3.0","total":"122.32"}] 
var obj = JSON.parse(json);
var length = Object.keys(obj).length; //you get length json result 4

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