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

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>

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


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

24

você não precisa alterar seu formato JSON.

substituir:

console.log(data.phones.length);

com:

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


-3

use este

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

ou

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

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

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ê
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.