d'obtenir la taille de l'objet json

j'ai un objet json qui est retourné par une requête AJAX et j'ai quelques problèmes avec le .length parce qu'il continue à retourner undefined . Je me demande juste si je l'utilise correctement:

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

ils retournent tous les deux undefined même s'ils sont des objets valides.

mise à jour:

Échantillon de l'objet JSON retourné:

{"reqStatus":true,"phones":{"one":{"number":"XXXXXXXXXX","type":"mobile"},"two":{"number":"XXXXXXXXXX","type":"mobile"}}}
177
demandé sur Programmer Bruce 2011-07-20 05:44:13

7 réponses

vous pouvez utiliser quelque chose comme ceci

<script type="text/javascript">

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

  var count = Object.keys(myObject).length;
  console.log(count);
</script>
428
répondu Kasun 2016-02-13 21:02:45

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

1) Changez votre structure JSON (en supposant que cela est possible) de sorte que les "téléphones" deviennent

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

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

2) itérez les objets contenus dans l'objet de votre téléphone et comptez - les au fur et à mesure, p.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 à ce

51
répondu tomfumb 2017-05-23 12:02:59

envisagez d'utiliser underscore.js . Il vous permettra de vérifier la taille i.e. comme cela:

var data = {one : 1, two : 2, three : 3};
_.size(data);
//=> 3
_.keys(data);
//=> ["one", "two", "three"]
_.keys(data).length;
//=> 3
27
répondu ForestierSimon 2013-03-06 10:54:13
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
14
répondu surya handoko 2015-03-25 06:53: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 ) ;
12
répondu kkk 2016-01-20 15:03:33

utilisez celui-ci

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

ou

//for getting length of array
 int length = jsonArray.length();
-1
répondu Mahesh Gawhane 2016-06-02 09:11:03
$(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);
    });
});
-5
répondu user2674838 2017-09-05 07:14:23