obtenir la taille de l'objet json


235

j'ai un objet json qui est renvoyé par une demande AJAX et j'ai des problèmes avec le .lengthcar il continue de revenir undefined. Je me demande simplement si je l'utilise correctement:

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

Ils retournent tous les deux undefinedmême s'ils sont des objets valides.

Mise à jour:
exemple de l'objet JSON renvoyé:

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

Pouvez-vous publier un échantillon du JSON retourné?
Joe

Je ne suis pas sûr, ce n'était pas moi. Je pense que votre question est très bien également.
Joe

Réponses:


556

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>

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

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

7
@OlofuMark Bien qu'il ne soit pas nécessaire 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 de prendre cela en compte ou non.
David Navarre

C'est agréable de voir une solution qui ne nécessite pas que JSON ait des tableaux imbriqués. Je pensais que tout l'intérêt de JSON était que tout soit un objet.
Healforgreen

c'est une solution fantastique pour obtenir la longueur des objets json
Shaymol Bapary

54

Votre problème est que votre objet téléphones n'a pas de propriété de longueur (sauf si vous le définissez quelque part dans le JSON que vous renvoyez) car les objets ne sont pas les mêmes que les tableaux, même lorsqu'ils sont utilisés comme tableaux associatifs. Si l'objet télé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) afin que les «téléphones» deviennent

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

    (notez qu'il n'y a pas d'identifiant mot pour chaque téléphone car ils sont retournés dans un tableau indexé 0). Dans cette réponse phones.lengthsera 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 de nouveaux navigateurs, l'option 2 pourrait ressembler à ceci


Comment pourrais-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: "téléphones": [{"numéro": "XXXXXXXXXX" , "type": "mobile"}, {"numéro": "XXXXXXXXXX", "type": "mobile"}]
Erick

29

Pensez à utiliser underscore.js . Il vous permettra de vérifier la taille c'est à dire comme ça:

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

24

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

remplacer:

console.log(data.phones.length);

avec:

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

16
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

2
Il s'agit d'un objet json déjà analysé. Si vous exécutez les instructions ci-dessus, cela vous donnera une erreur «Jeton inattendu o dans Json». Pour calculer la longueur de json, vous pouvez directement faire var length = Object.keys (json) .length.
Aayushi


-3

utiliser celui-ci

//for getting length of object
 int length = jsonObject.length();

ou

//for getting length of array
 int length = jsonArray.length();

6
length () n'est pas une fonction d'objet JSON
Sunding Wei

-5
$(document).ready(function () {
    $('#count_my_data').click(function () {
        var count = 0;
        while (true) {
             try {
                var v1 = mydata[count].TechnologyId.toString();
                count = count + 1;
            }
            catch (e)
            { break; }
        }
        alert(count);
    });
});

1
attendre une exception pour vous dire que votre liste est à court d'éléments est une mauvaise idée, et cette approche donnera silencieusement le mauvais compte si un élément (même le dernier) manque la TechnologyIdpropriété
tomfumb

1
Ce code est si mauvais que je ne vais même pas commenter davantage. Voté -1!
Georgi-it
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.