obtener el tamaño del objeto json


235

Tengo un objeto json que devuelve una solicitud AJAX y tengo algunos problemas con el .lengthporque sigue regresando undefined. Me pregunto 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"}}}

¿Puedes publicar una muestra del JSON devuelto?
Joe

No estoy seguro, no fui yo. Creo que tu pregunta también está bien.
Joe

Respuestas:


556

Puedes usar algo como esto

<script type="text/javascript">

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

  var count = Object.keys(myObject).length;
  console.log(count);
</script>

62
@Matt, NO es obligatorio que cada código funcione en IE 7 u 8. Estas plataformas inadecuadas o no estándar que se protegen son simplemente inconvenientes.
Olofu Mark

55
@OlofuMark no todos pueden elegir qué navegador están usando (por ejemplo, redes bloqueadas, dependencias de DLL de IE versionadas que usan las aplicaciones internas). Si acomodar los navegadores obsoletos requiere considerable esfuerzo a continuación, haciendo caso omiso de ellos pueden ser justificadas, pero en tal caso trivial ya que esto es sólo grosero no
tomfumb

77
@OlofuMark Si bien no es necesario admitir esas versiones, los desarrolladores deben saber cuándo el código que producen no funcionará en ciertas versiones para que puedan decidir si tomarlo en cuenta o no.
David Navarre

Es agradable ver una solución que no requiere que JSON tenga matrices anidadas. Pensé que el objetivo de JSON era que todo fuera un objeto.
Healforgreen

es una solución fantástica para obtener la longitud de los objetos json
Shaymol Bapary

54

Su problema es que el objeto de su teléfono no tiene una propiedad de longitud (a menos que lo defina en algún lugar del JSON que devuelva) ya que los objetos no son lo mismo que las matrices, incluso cuando se utilizan como matrices asociativas. Si el objeto del teléfono 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 de número de palabra para cada teléfono, ya que se devuelven en una matriz indexada a 0). En esta respuesta phones.lengthserá válida.

  2. Repite los objetos contenidos en el objeto de tu teléfono y cuéntalos a medida que avanzas, por ejemplo

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

Si solo está apuntando a nuevos navegadores, la opción 2 podría verse como este


¿Cómo obtendría la longitud del objeto JSON con la primera solución dado que mi objeto JSON está almacenado en una variable llamada jsonObject y tengo el mismo JSON que el anterior: "teléfonos": [{"número": "XXXXXXXXXX" , "type": "mobile"}, {"number": "XXXXXXXXXX", "type": "mobile"}]
Erick

29

Considere usar underscore.js . Le permitirá comprobar 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

24

no necesita cambiar su formato JSON.

reemplazar:

console.log(data.phones.length);

con:

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 es un objeto json ya analizado. Si ejecuta las declaraciones anteriores, le dará un error 'Token inesperado o en Json'. Para calcular la longitud de json, puede hacer directamente var length = Object.keys (json) .length.
Aayushi


-3

usa este

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

o

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

66
length () no es una función de objeto JSON
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
a la espera de una excepción que le diga su lista se ha quedado sin elementos es una mala idea, y este enfoque será en silencio dar cuenta del número incorrecto si cualquier elemento (incluso el último) no se encuentra la TechnologyIdpropiedad
tomfumb

1
Este código es tan malo que ni siquiera voy a comentar más. Votado -1!
Georgi-it
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.