web-dev-qa-db-fra.com

obtenir la taille de l'objet json

j'ai un objet JSON qui est renvoyé par une demande AJAX et j'ai quelques problèmes avec le .length car il continue de renvoyer undefined. Je me demandais si je l'utilisais correctement:

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

Ils renvoient tous les deux undefined même s’ils sont des objets valides.

Mettre à jour:
Exemple d'objet JSON renvoyé:

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

Vous pouvez utiliser quelque chose comme ça

<script type="text/javascript">

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

  var count = Object.keys(myObject).length;
  console.log(count);
</script>
460
Kasun

Votre problème est que votre objet phones n'a pas de propriété length (à moins que vous ne le définissiez quelque part dans le code 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 "téléphones" devienne 

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

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

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

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 à this

53
tomfumb

Pensez à utiliser underscore.js . Cela vous permettra de vérifier la taille, c'est-à-dire:

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

vous n'avez pas besoin de changer votre format JSON.

remplacer:

console.log(data.phones.length);

avec:

console.log( Object.keys( data.phones ).length ) ;
15
kkk
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
15
surya handoko

essaye ça

$.parseJSON(data).length
0
Hafsal Rh