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"}}}
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>
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
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
sie müssen Ihr JSON-Format nicht ändern.
ersetzen:
console.log(data.phones.length);
mit:
console.log( Object.keys( data.phones ).length ) ;
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
versuche dies
$.parseJSON(data).length