Größe des JSON-Objekts abrufen

233

Ich habe ein JSON-Objekt, das von einer AJAX-Anfrage zurückgegeben wird, und ich habe einige Probleme mit dem, .lengthweil es immer wieder zurückgegeben wird undefined. Ich frage mich nur, ob ich es richtig benutze:

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

Beide kehren zurück undefined, 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"}}}
nkcmr
quelle
Können Sie ein Beispiel des zurückgegebenen JSON veröffentlichen?
Joe
Ich bin mir nicht sicher, nicht wahr? Ich denke, Ihre Frage ist auch in Ordnung.
Joe

Antworten:

554

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>
Kasun
quelle
61
@Matt, Es ist NICHT obligatorisch, dass jeder Code in IE 7 oder 8 funktioniert. Diese unzureichenden oder nicht standardmäßigen Plattformen, die geschützt werden, sind einfach Nachteile.
Olofu Mark
5
@OlofuMark Nicht jeder kann auswählen, welchen Browser er verwendet (z. B. gesperrte Netzwerke, versionierte IE-DLLs-Abhängigkeiten, die von internen Anwendungen verwendet werden). Wenn die Anpassung veralteter Browser einen erheblichen Aufwand erfordert, kann es gerechtfertigt sein, sie zu ignorieren, aber in einem so trivialen Fall wie diesem ist es einfach unhöflich, dies nicht zu
tun
7
@OlofuMark Obwohl diese Versionen nicht unterstützt werden müssen, sollten Entwickler wissen, wann der von ihnen erstellte Code bei bestimmten Versionen nicht funktioniert, damit sie entscheiden können, ob sie dies berücksichtigen oder nicht.
David Navarre
Es ist schön, eine Lösung zu sehen, bei der JSON keine verschachtelten Arrays haben muss. Ich dachte, der springende Punkt bei JSON ist, dass alles ein Objekt ist.
Healforgreen
Es ist eine fantastische Lösung, um die Länge von
JSON-
54

Ihr Problem ist, dass Ihr Telefonobjekt keine Längeneigenschaft hat (es sei denn, Sie definieren es irgendwo in dem von Ihnen zurückgegebenen JSON), 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, dies ist möglich), sodass "Telefone" werden

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

    (Beachten Sie, dass es für jedes Telefon keine wortnummerierte Kennung gibt, da diese in einem 0-indizierten Array zurückgegeben werden.) In dieser Antwort phones.lengthwird gültig.

  2. Durchlaufen Sie die Objekte in Ihrem Telefonobjekt und zählen Sie sie, während Sie gehen, z

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

Wenn Sie nur neue Browser - Targeting - Option 2 könnte wie folgt aussehen diese

Tomfumb
quelle
Wie würde ich die Länge des JSON-Objekts mit der ersten Lösung ermitteln, wenn mein JSON-Objekt in einer Variablen namens jsonObject gespeichert ist und ich denselben JSON wie oben habe: "Telefone": [{"Nummer": "XXXXXXXXXX" , "Typ": "Handy"}, {"Nummer": "XXXXXXXXXX", "Typ": "Handy"}]
Erick
29

Erwägen Sie die Verwendung von underscore.js . Damit können Sie die Größe überprüfen, dh wie folgt:

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

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

ersetzen:

console.log(data.phones.length);

mit:

console.log( Object.keys( data.phones ).length ) ;
kkk
quelle
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
quelle
2
Dies ist ein bereits analysiertes JSON-Objekt. Wenn Sie die obigen Anweisungen ausführen, wird der Fehler "Unerwartetes Token o in Json" angezeigt. Zur Berechnung der Länge von json können Sie direkt var length = Object.keys (json) .length ausführen.
Aayushi
1

Versuche dies

$.parseJSON(data).length
Hafsal Rh
quelle
-3

verwende das hier

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

oder

//for getting length of array
 int length = jsonArray.length();
Mahesh Gawhane
quelle
6
length () ist keine JSON-Objektfunktion
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
quelle
1
Es ist eine schlechte Idee, auf eine Ausnahme zu warten, die Ihnen mitteilt, dass Ihre Liste keine Elemente mehr enthält, und dieser Ansatz gibt stillschweigend die falsche Anzahl an, wenn einem Element (auch dem letzten) die TechnologyIdEigenschaft fehlt
Tomfumb
1
Dieser Code ist so schlecht, dass ich nicht einmal weiter darauf eingehen werde. Gewählt -1!
Georgi-it