ottenere la dimensione dell'oggetto json


235

ho un oggetto json che viene restituito da una richiesta AJAX e ho qualche problema con il .lengthperché continua a tornare undefined. Mi chiedo solo se lo sto usando bene:

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

Entrambi ritornano undefinedanche se sono oggetti validi.

Aggiornamento:
esempio dell'oggetto JSON restituito:

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

Puoi pubblicare un campione del JSON restituito?
Joe,

Non sono sicuro, non sono stato io. Penso che anche la tua domanda vada bene.
Joe,

Risposte:


556

Puoi usare qualcosa del genere

<script type="text/javascript">

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

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

62
@Matt, NON è obbligatorio che tutti i codici funzionino in IE 7 o 8. Queste piattaforme inadeguate o non standard protette sono semplicemente degli svantaggi.
Olofu Mark l'

5
@OlofuMark non tutti possono scegliere quale browser utilizzare (ad es. Reti bloccate, dipendenze di DLL IE con versione utilizzate dalle applicazioni interne). Se accogliere browser obsoleti richiede uno sforzo significativo, ignorarli può essere giustificato, ma in un caso così banale come questo è maleducato non farlo
tomfumb

7
@OlofuMark Sebbene non sia necessario supportare tali versioni, gli sviluppatori dovrebbero sapere quando il codice che producono non funzionerà su determinate versioni in modo da poter decidere se tenerne conto o meno.
David Navarre,

È bello vedere una soluzione che non richiede che JSON abbia array nidificati. Pensavo che il punto centrale di JSON fosse avere tutto come oggetto.
Healforgreen,

è una soluzione fantastica per ottenere la lunghezza di oggetti json
Shaymol Bapary

54

Il tuo problema è che l'oggetto del tuo telefono non ha una proprietà length (a meno che tu non lo definisca da qualche parte nel JSON che ritorni) in quanto gli oggetti non sono gli stessi degli array, anche se usati come array associativi. Se l'oggetto telefoni fosse un array avrebbe una lunghezza. Hai due opzioni (forse più).

  1. Cambia la tua struttura JSON (supponendo che sia possibile) in modo che i "telefoni" diventino

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

    (notare che non esiste un identificatore numerato a parola per ciascun telefono poiché vengono restituiti in un array con indice 0). In questa risposta phones.lengthsarà valida.

  2. Scorrere gli oggetti contenuti nell'oggetto del telefono e contarli mentre si procede, ad es

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

Se ci si rivolge solo i nuovi browser l'opzione 2 potrebbe assomigliare a questo


Come otterrei la lunghezza dell'oggetto JSON con la prima soluzione dato che il mio oggetto JSON è archiviato in una variabile chiamata jsonObject e ho lo stesso JSON come sopra: "telefoni": [{"numero": "XXXXXXXXXX" , "type": "mobile"}, {"number": "XXXXXXXXXX", "type": "mobile"}]
Erick

29

Prendi in considerazione l'utilizzo di underscore.js . Ti permetterà di controllare le dimensioni, cioè in questo modo:

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

24

non è necessario modificare il formato JSON.

sostituire:

console.log(data.phones.length);

con:

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

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

2
Questo è un oggetto json già analizzato. Se esegui le istruzioni precedenti, ti verrà visualizzato un errore "Token imprevisto o in Json". Per calcolare la lunghezza di json è possibile eseguire direttamente var length = Object.keys (json) .length.
Aayushi,


-3

usa questo

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

o

//for getting length of array
 int length = jsonArray.length();

6
length () non è una funzione oggetto 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);
    });
});

1
aspettare un'eccezione per dirti che la tua lista è a corto di elementi è una cattiva idea, e questo approccio darà silenziosamente il conto sbagliato se a qualche elemento (anche l'ultimo) manca la TechnologyIdproprietà
tomfumb

1
Questo codice è così male, che non commenterò ulteriormente. Votato -1!
Georgi-it,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.