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"}}}
nkcmr
la source
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>
Kasun
la source
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

tomfumb
la source
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
ForestierSimon
la source
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 ) ;
kkk
la source
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
surya handoko
la source
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
1

essaye ça

$.parseJSON(data).length
Hafsal Rh
la source
-3

utiliser celui-ci

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

ou

//for getting length of array
 int length = jsonArray.length();
Mahesh Gawhane
la source
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);
    });
});
user2674838
la source
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