obtener el tamaño del objeto JSON
Tengo un objeto JSON que se devuelve mediante una solicitud AJAX y tengo algunos problemas con él .length
porque sigue regresando undefined
. Sólo me preguntaba si lo estoy usando bien:
console.log(data.length);
console.log(data.phones.length);
Ambos regresan undefined
aunque sean objetos válidos.
Actualización:
muestra del objeto JSON devuelto:
{"reqStatus":true,"phones":{"one":{"number":"XXXXXXXXXX","type":"mobile"},"two":{"number":"XXXXXXXXXX","type":"mobile"}}}
Puedes usar algo como esto
var myObject = {'name':'Kasun', 'address':'columbo','age': '29'}
var count = Object.keys(myObject).length;
console.log(count);
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).
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.length
será válida.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í
no necesita cambiar su formato JSON.
reemplazar:
console.log(data.phones.length);
con:
console.log( Object.keys( data.phones ).length ) ;
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
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