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"}}}

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>

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


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

24

nie musisz zmieniać formatu JSON.

zastąpić:

console.log(data.phones.length);

z:

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
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,


-3

użyj tego

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

lub

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

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);
    });
});

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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.