obter tamanho do objeto json

234

Eu tenho um objeto json que é retornado por uma solicitação AJAX e estou tendo alguns problemas com o .lengthporque ele continua retornando undefined. Apenas querendo saber se estou usando certo:

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

Os dois retornam undefinedmesmo sendo objetos válidos.

Atualização:
Amostra do objeto JSON retornada:

{"reqStatus":true,"phones":{"one":{"number":"XXXXXXXXXX","type":"mobile"},"two":{"number":"XXXXXXXXXX","type":"mobile"}}}
nkcmr
fonte
Você pode postar uma amostra do JSON retornado?
21411 Joe
Não tenho certeza, não fui eu. Eu acho que sua pergunta está bem também.
21411 Joe Joe

Respostas:

555

Você pode usar algo como isto

<script type="text/javascript">

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

  var count = Object.keys(myObject).length;
  console.log(count);
</script>
Kasun
fonte
62
@ Matt, NÃO é obrigatório que todo código funcione no IE 7 ou 8. Essas plataformas inadequadas ou fora do padrão que estão sendo protegidas são simplesmente desvantagens.
Olofu Mark
5
O @OlofuMark nem todo mundo escolhe qual navegador está usando (por exemplo, redes bloqueadas, dependências de DLLs do IE com versão usadas por aplicativos internos). Se acomodar navegadores desatualizados exige um esforço significativo, em seguida, ignorá-los pode ser justificada, mas em um caso tão trivial como esta é apenas rude não
tomfumb
7
@OlofuMark Embora não seja necessário oferecer suporte a essas versões, os desenvolvedores devem saber quando o código produzido não funcionará em determinadas versões, para que possam decidir se levarão isso em consideração ou não.
David Navarre
É bom ver uma solução que não exija que o JSON tenha matrizes aninhadas. Eu pensei que o ponto principal do JSON era fazer com que tudo fosse um objeto.
Healforgreen
é uma solução fantástica para obter o comprimento de objetos JSON
Shaymol Bapary
54

Seu problema é que o objeto phone não possui uma propriedade length (a menos que você a defina em algum lugar no JSON que você retorna), pois os objetos não são os mesmos que os arrays, mesmo quando usados ​​como arrays associativos. Se o objeto telefones fosse uma matriz, ele teria um comprimento. Você tem duas opções (talvez mais).

  1. Altere sua estrutura JSON (assumindo que isso seja possível) para que 'phones' se torne

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

    (observe que não há identificador numerado por palavra para cada telefone, pois eles são retornados em uma matriz indexada em 0). Nesta resposta phones.lengthserá válida.

  2. Itere os objetos contidos no objeto do telefone e conte-os à medida que avança, por exemplo

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

Se você estiver segmentando apenas novos navegadores, a opção 2 poderá ter esta aparência

tomfumb
fonte
Como obteria o comprimento do objeto JSON com a primeira solução, já que meu objeto JSON é armazenado em uma variável chamada jsonObject e tenho o mesmo JSON acima: "phones": [{"number": "XXXXXXXXXX" , "type": "mobile"}, {"number": "XXXXXXXXXX", "type": "mobile"}]
Erick
29

Considere usar underscore.js . Isso permitirá que você verifique o tamanho, ou seja, assim:

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

você não precisa alterar seu formato JSON.

substituir:

console.log(data.phones.length);

com:

console.log( Object.keys( data.phones ).length ) ;
kkk
fonte
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
fonte
2
Este é um objeto json já analisado. Se você executar as instruções acima, ocorrerá um erro 'Token inesperado o no Json'. Para calcular o comprimento do json, você pode fazer diretamente var length = Object.keys (json) .length.
Aayushi
1

tente isso

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

use este

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

ou

//for getting length of array
 int length = jsonArray.length();
Mahesh Gawhane
fonte
6
comprimento () não é uma função contínua JSON objeto
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
fonte
1
à espera de uma exceção para dizer-lhe a sua lista não tem mais elementos é uma má idéia, e esta abordagem irá silenciosamente dar a contagem de errado se qualquer elemento (mesmo a última) está faltando a TechnologyIdpropriedade
tomfumb
1
Esse código é tão ruim que nem vou comentar mais. Votou em -1!
você