2009-04-29 24 views
55

Estoy devolviendo una lista <> desde un servicio web como una lista de objetos JSON. Estoy tratando de usar un bucle for para recorrer la lista y tomar los valores de las propiedades. Esta es una muestra de la JSON regresar:Loop a través del objeto JSON Lista

{"d":[{"__type":"FluentWeb.DTO.EmployeeOrder", 
"EmployeeName":"Janet Leverling", 
"EmployeeTitle":"Sales Representative", 
"RequiredDate":"\/Date(839224800000)\/", 
"OrderedProducts":null}]} 

Así que estoy tratando de extraer el contenido utilizando algo como esto:

function PrintResults(result) { 

for (var i = 0; i < result.length; i++) { 
    alert(result.employeename); 
} 

¿Cómo debe hacerse esto?

+0

En Java, necesita asignar el Json a POJO. Una vez hecho esto, puede recuperar cualquier valor.Si su Lista lo itera (repite) y obtiene el valor json a través del objeto – Pavan

Respuesta

51

tenían el mismo problema hoy en día, Su tema me ayudó así que aquí va solución;)

alert(result.d[0].EmployeeTitle); 
+4

Gracias. Esta es la conclusión a la que llegué también. Aquí hay una gran publicación que tiene la solución detallada. http://elegantcode.com/2009/05/04/jquery-ajax-with-class-arrays/ Espero que esto ayude a los demás. – Nick

+0

el enlace en el comentario anterior está muerto – seinecle

+2

el enlace en el comentario anterior es undead – kojow7

64

Tenga cuidado, d es la lista.

for (var i = 0; i < result.d.length; i++) { 
    alert(result.d[i].employeename); 
} 
+0

Gracias ... pero eso tampoco devuelve nada. – Nick

+1

Debería. Eso es correcto. JavaScript distingue mayúsculas de minúsculas EmployeeName –

16

¡Ya está! Prueba esto:

for (var prop in result) { 
    if (result.hasOwnProperty(prop)) { 
     alert(result[prop]); 
    } 
} 

Actualización:

Si el resultado es verdaderamente es una matriz de un objeto, entonces puede que tenga que hacer esto:

for (var prop in result[0]) { 
    if (result[0].hasOwnProperty(prop)) { 
     alert(result[0][prop]); 
    } 
} 

O si lo desea recorrer cada resultado en la matriz si hay más, intente:

for (var i = 0; i < results.length; i++) { 
    for (var prop in result[i]) { 
     if (result[i].hasOwnProperty(prop)) { 
      alert(result[i][prop]); 
     } 
    } 
} 
+1

Esto me acerca ... Sigue alertando con [object Object], [object Object] .... – Nick

8

Dado que está utilizando jQuery, también podría usar cada uno de los metodos d ... Además, parece que todo es un valor de la propiedad 'd' en este Objeto JS [Notación].

$.each(result.d,function(i) { 
    // In case there are several values in the array 'd' 
    $.each(this,function(j) { 
     // Apparently doesn't work... 
     alert(this.EmployeeName); 
     // What about this? 
     alert(result.d[i][j]['EmployeeName']); 
     // Or this? 
     alert(result.d[i][j].EmployeeName); 
    }); 
}); 

Eso debería funcionar. si no, entonces quizás nos puedas dar un ejemplo más largo del JSON.

Edit: Si nada de esto funciona, entonces estoy empezando a pensar que puede haber algún problema con la sintaxis de su JSON.

+0

Encontré la solución por las malas (no por JQuery). Voy a probar esto lo antes posible. Prefiero hacerlo a tu manera. Me aseguraré de publicar la solución. – Nick

+0

Así que esto muy, muy cerca. Ahora estoy recorriendo la matriz de objetos. En FireBug puedo ver los valores en las propiedades, pero la alerta simplemente devuelve "No definido". ¿Cómo puedo sacar la cadena, las fechas, etc. de las propiedades? – Nick

15

Aquí está:

success: 
    function(data) { 
     $.each(data, function(i, item){ 
      alert("Mine is " + i + "|" + item.title + "|" + item.key); 
     }); 
    } 

Muestra texto JSON:

{"title": "camp crowhouse", 
"key": "agtnZW90YWdkZXYyMXIKCxIEUG9zdBgUDA"} 
1

tengo la siguiente llamada:

$('#select_box_id').change(function() { 
     var action = $('#my_form').attr('action'); 
    $.get(action,{},function(response){ 
     $.each(response.result,function(i) { 

      alert("key is: " + i + ", val is: " + response.result[i]); 

     }); 
    }, 'json'); 
    }); 

La estructura de regresar de la mirada del servidor como:

{"result":{"1":"waterskiing","2":"canoeing","18":"windsurfing"}} 
6
var d = $.parseJSON(result.d); 
for(var i =0;i<d.length;i++){ 
    alert(d[i].EmployeeName); 
} 
+1

¿Podría agregar una breve explicación con el código? – jonsca

+0

aquí revise el siguiente enlace espero que ayude http://encosia.com/never-worry-about-asp-net-ajaxs-d-again/ –

1

Esto funcionará!

$(document).ready(function() 
    { 
     $.ajax(
      { 
      type: 'POST', 
      url: "/Home/MethodName", 
      success: function (data) { 
       //data is the string that the method returns in a json format, but in string 
       var jsonData = JSON.parse(data); //This converts the string to json 

       for (var i = 0; i < jsonData.length; i++) //The json object has lenght 
       { 
        var object = jsonData[i]; //You are in the current object 
        $('#olListId').append('<li class="someclass>' + object.Atributte + '</li>'); //now you access the property. 

       } 

       /* JSON EXAMPLE 
       [{ "Atributte": "value" }, 
       { "Atributte": "value" }, 
       { "Atributte": "value" }] 
       */ 
      } 
     }); 
    }); 

Lo principal de esto es usar la propiedad exactamente igual que el atributo del par clave-valor JSON.

+0

¿Qué tal eso? Creo que ahora está mejor explicado. –

+1

Mejor, sin los gritos, también. ¡Buena suerte! – Mogsdad

Cuestiones relacionadas