uzyskać rozmiar obiektu json

234

Mam obiekt JSON, który jest zwracany przez żądanie AJAX i mam pewne problemy z tym, .lengthże ciągle powraca undefined. Zastanawiam się, czy używam tego poprawnie:

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

Obaj wracają, undefinedmimo że są ważnymi obiektami.

Aktualizacja:
zwrócona próbka obiektu JSON:

{"reqStatus":true,"phones":{"one":{"number":"XXXXXXXXXX","type":"mobile"},"two":{"number":"XXXXXXXXXX","type":"mobile"}}}
nkcmr
źródło
Czy możesz opublikować próbkę zwróconego JSON?
Joe
Nie jestem pewien, to nie byłem ja. Myślę, że twoje pytanie też jest w porządku.
Joe

Odpowiedzi:

555

Możesz użyć czegoś takiego

<script type="text/javascript">

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

  var count = Object.keys(myObject).length;
  console.log(count);
</script>
Kasun
źródło
62
@Matt, NIE jest obowiązkowy, aby każdy kod działał w IE 7 lub 8. Te nieodpowiednie lub niestandardowe chronione platformy są po prostu wadami.
Olofu Mark
5
@OlofuMark nie każdy może wybrać przeglądarkę, z której korzysta (np. Zablokowane sieci, wersjonowane zależności bibliotek DLL IE używane przez aplikacje wewnętrzne). Jeśli przystosowanie przestarzałych przeglądarek wymaga znacznego wysiłku, ich zignorowanie może być uzasadnione, ale w tak trywialnym przypadku, jak to niegrzeczne, nie można
tomfumb
7
@OlofuMark Chociaż obsługa tych wersji nie jest wymagana, programiści powinni wiedzieć, kiedy produkowany przez nich kod nie będzie działał w niektórych wersjach, aby mogli zdecydować, czy wziąć to pod uwagę, czy nie.
David Navarre
Miło jest widzieć rozwiązanie, które nie wymaga od JSON zagnieżdżania tablic. Myślałem, że sedno JSON polega na tym, aby wszystko było przedmiotem.
Healforgreen 12.01.16
to fantastyczne rozwiązanie, aby uzyskać długość obiektów typu json
Shaymol Bapary
54

Problem polega na tym, że obiekt telefonu nie ma właściwości length (chyba że zdefiniujesz go gdzieś w zwracanym JSON), ponieważ obiekty nie są takie same jak tablice, nawet gdy są używane jako tablice asocjacyjne. Gdyby obiekt telefonów był tablicą, miałby długość. Masz dwie opcje (może więcej).

  1. Zmień strukturę JSON (zakładając, że jest to możliwe), aby stały się „telefony”

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

    (Uwaga: dla każdego telefonu nie ma identyfikatora numerycznego, ponieważ są one zwracane w tablicy z indeksowaniem 0). W tej odpowiedzi phones.lengthbędą ważne.

  2. Iteruj przez obiekty znajdujące się w obiekcie telefonu i policz je podczas podróży, np

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

Jeśli kierujesz tylko nowych przeglądarek Opcja 2 mogłaby wyglądać ta

tomfumb
źródło
Jak uzyskać długość obiektu JSON przy pierwszym rozwiązaniu, biorąc pod uwagę, że mój obiekt JSON jest przechowywany w zmiennej o nazwie jsonObject i mam taki sam JSON jak powyżej: „telefony”: [{„liczba”: „XXXXXXXXXX” , „type”: „mobile”}, {„number”: „XXXXXXXXXX”, „type”: „mobile”}]
Erick
29

Rozważ użycie underscore.js . Pozwoli ci to sprawdzić rozmiar tj. W ten sposób:

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

nie musisz zmieniać formatu JSON.

zastąpić:

console.log(data.phones.length);

z:

console.log( Object.keys( data.phones ).length ) ;
kkk
źródło
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
źródło
2
To jest już przeanalizowany obiekt Json. Wykonanie powyższych instrukcji spowoduje wyświetlenie błędu „Nieoczekiwany token w Json”. Aby obliczyć długość json, możesz bezpośrednio wykonać var ​​length = Object.keys (json) .length.
Aayushi,
1

Spróbuj tego

$.parseJSON(data).length
Hafsal Rh
źródło
-3

użyj tego

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

lub

//for getting length of array
 int length = jsonArray.length();
Mahesh Gawhane
źródło
6
length () nie jest
funkcją
-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);
    });
});
użytkownik2674838
źródło
1
czekanie na wyjątek informujący, że na liście skończyły się elementy, jest złym pomysłem, a to podejście po cichu da niepoprawną liczbę, jeśli jakikolwiek element (nawet ostatni) nie ma TechnologyIdwłaściwości
tomfumb
1
Ten kod jest tak zły, że nie będę nawet komentował dalej. Zagłosowano -1!
Georgi-it,