2009-01-17 27 views
28

No pude encontrar nada sobre cómo obtener el recuento total de registros JSON utilizando jQuery.¿Cómo obtengo el conteo total de registros Json usando JQuery?

Aquí está el JSON devuelto:

{"Email":"Please enter your Email.","Password":"Please enter a password."}

Aquí está mi código:

$(function() { 
    $("#btnSubmit").click(function() { 
     $.ajax({ 
      url: "/account/signup", 
      type: "POST", 
      dataType: "json", 
      data: { 
       Email: $("#strEmail").val(), 
       Password: $("#strPassword").val() 
      }, 
      success: function(j) { 
        $(".errMsg").hide(); 
        alert(j.length); // I couldn't get the total count 
       $.each(j, function(n) { 
        $("#err" + n).html(j[n]); 
        $("#err" + n).show(); 
       }) 

      }, 
      error: function(req, status, error) { 
       alert(req); 
      } 
     }); 
    }); 
}); 
+0

¿Por qué se cierra la votación? – Kev

+0

¿Pero el controlador de $ .each at success muestra los registros correctos? – tanathos

+0

Sí, todo funciona bien, excepto el conteo total de registros. –

Respuesta

65

Si usted tiene algo como esto:

var json = [ {a:b, c:d}, {e:f, g:h, ...}, {..}, ... ] 

a continuación, puede hacerlo :

alert(json.length) 
+2

Gracias por su respuesta, pero probé su código, pero no funciona para mí. –

+5

Esto muestra la longitud de la cadena JSON, no el recuento de la matriz – Sliq

+1

Gracias @tiago! Finalmente me dio mi solución y fue la siguiente: 'éxito: función (respuesta) { console.log (response.length); }, ' –

4

Su json no es una matriz, no tiene propiedad de longitud. Debe cambiar su declaración de datos o la forma en que obtiene su conteo de datos.

+0

Incluso cambié el resultado de Json (estoy seguro de que es correcto), la longitud aún no funciona. –

6

¿Por qué querrías longitud en este caso?

Si desea comprobar la longitud, tienen el servidor devuelve una matriz JSON con pares de valores clave como este:

[ 
    {key:value}, 
    {key:value} 
] 

En JSON, [y] representa una matriz (con una propiedad de longitud) , {y} representa un objeto (sin una propiedad de longitud). Puede iterar a través de los miembros de un objeto, pero también obtendrá funciones, haciendo inútil la verificación de la longitud de los miembros, excepto para iterar sobre ellos.

2

Lo que estamos buscando es

j.d.length 

El d es la clave. Al menos es en mi caso, estoy usando un servicio web .NET.

$.ajax({ 
      type: "POST", 
      url: "CantTellU.asmx", 
      data: "{'userID' : " + parseInt($.query.get('ID')) + " }", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function(msg, status) { 
       ApplyTemplate(msg); 
       alert(msg.d.length); 
      } 
     }); 
+0

No olvide marcarlo como respuesta si le sirve. – Frenchie

+0

Esto no funcionó para mí, llamé "hasOwnProperty" que tiene la "longitud" disponible pero devolvió falso. Sin embargo, tal vez fue específico para la estructura de mi JSON. –

15

El OP intenta contar el número de propiedades en un objeto JSON. Esto podría hacerse con una variable de temperatura incrementada en el iterador, pero parece querer saber el recuento antes de que comience la iteración. Se proporciona una función simple que cumple con la necesidad en la parte inferior de this page.

Aquí está un cortar y pegar del código, que trabajó para mí:

function countProperties(obj) { 
    var prop; 
    var propCount = 0; 

    for (prop in obj) { 
    propCount++; 
    } 
    return propCount; 
} 

Esto debería funcionar bien para un objeto JSON. Para otros objetos, que pueden derivar propiedades de su cadena de prototipo, necesitaría agregar una prueba hasOwnProperty().

2

tal vez es posible que desee probar JSON.parse el resultado devuelto por primera vez, entonces puede obtener el recuento por .length

4

Pruebe lo siguiente:

var count=Object.keys(result).length; 

no funciona IE8 e inferior.

Cuestiones relacionadas