web-dev-qa-db-de.com

liefert die Größe des Json-Objekts

ich habe ein Json-Objekt, das von einer AJAX -Anforderung zurückgegeben wird, und ich habe Probleme mit dem .length, da es ständig undefined zurückgibt. Ich frage mich nur, ob ich es richtig benutze:

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

Beide geben undefined zurück, obwohl sie gültige Objekte sind.

Update:
Beispiel des zurückgegebenen JSON-Objekts:

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

Sie können so etwas verwenden

<script type="text/javascript">

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

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

Ihr Problem ist, dass Ihr Telefonsobjekt keine length-Eigenschaft hat (es sei denn, Sie definieren es irgendwo in der JSON-Datei, die Sie zurückgeben), da Objekte nicht mit Arrays identisch sind, selbst wenn sie als assoziative Arrays verwendet werden. Wenn das Telefonobjekt ein Array wäre, hätte es eine Länge. Sie haben zwei Möglichkeiten (vielleicht mehr).

1) Ändern Sie Ihre JSON-Struktur (vorausgesetzt, dass dies möglich ist), sodass "Telefone" werden 

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

(Beachten Sie, dass für jedes Telefon kein Bezeichner mit Word-Nummer vorhanden ist, da diese in einem 0-indizierten Array zurückgegeben werden.) In dieser Antwort ist phones.length gültig.

2) Durchlaufen Sie die Objekte in Ihrem Telefonobjekt und zählen Sie sie, z.

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

Wenn Sie nur auf neue Browser abzielen, könnte Option 2 wie folgt aussehen: this

53
tomfumb

Erwägen Sie die Verwendung von underscore.js . So können Sie die Größe überprüfen, d. H.

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

sie müssen Ihr JSON-Format nicht ändern.

ersetzen:

console.log(data.phones.length);

mit:

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

versuche dies

$.parseJSON(data).length
0
Hafsal Rh