obtener el tamaño del objeto JSON

Resuelto nkcmr asked hace 13 años • 9 respuestas

Tengo un objeto JSON que se devuelve mediante una solicitud AJAX y tengo algunos problemas con él .lengthporque sigue regresando undefined. Sólo me preguntaba si lo estoy usando bien:

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

Ambos regresan undefinedaunque sean objetos válidos.

Actualización:
muestra del objeto JSON devuelto:

{"reqStatus":true,"phones":{"one":{"number":"XXXXXXXXXX","type":"mobile"},"two":{"number":"XXXXXXXXXX","type":"mobile"}}}
nkcmr avatar Jul 20 '11 08:07 nkcmr
Aceptado

Puedes usar algo como esto

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

var count = Object.keys(myObject).length;
console.log(count);
Expandir fragmento

Kasun avatar Jan 17 '2013 12:01 Kasun

Su problema es que el objeto de su teléfono no tiene una propiedad de longitud (a menos que la defina en algún lugar del JSON que devuelve), ya que los objetos no son lo mismo que las matrices, incluso cuando se usan como matrices asociativas. Si el objeto de los teléfonos fuera una matriz, tendría una longitud. Tienes dos opciones (quizás más).

  1. Cambie su estructura JSON (suponiendo que esto sea posible) para que los 'teléfonos' se conviertan

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

    (tenga en cuenta que no hay un identificador numerado de palabras para cada teléfono, ya que se devuelven en una matriz indexada a 0). En esta respuesta phones.lengthserá válida.

  2. Repita los objetos contenidos dentro del objeto de su teléfono y cuéntelos a medida que avanza, por ejemplo

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

Si solo se dirige a nuevos navegadores, la opción 2 podría verse así

tomfumb avatar Jul 20 '2011 02:07 tomfumb

no necesita cambiar su formato JSON.

reemplazar:

console.log(data.phones.length);

con:

console.log( Object.keys( data.phones ).length ) ;
kkk avatar Jan 20 '2016 15:01 kkk

Considere usar underscore.js . Le permitirá verificar el tamaño, es decir, así:

var data = {one : 1, two : 2, three : 3};
_.size(data);
//=> 3
_.keys(data);
//=> ["one", "two", "three"]
_.keys(data).length;
//=> 3
ForestierSimon avatar Mar 06 '2013 10:03 ForestierSimon
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 avatar Mar 25 '2015 06:03 surya handoko