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"}}}
nkcmr
fuente
¿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>
Kasun
fuente
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

tonto
fuente
¿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
ForestierSimon
fuente
24

no necesita cambiar su formato JSON.

reemplazar:

console.log(data.phones.length);

con:

console.log( Object.keys( data.phones ).length ) ;
kkk
fuente
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
fuente
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
1

prueba esto

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

usa este

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

o

//for getting length of array
 int length = jsonArray.length();
Mahesh Gawhane
fuente
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);
    });
});
usuario2674838
fuente
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