2009-04-29 48 views
55

Tôi trả về một Danh sách <> từ một webservice dưới dạng Danh sách các đối tượng JSON. Tôi đang cố gắng sử dụng một vòng lặp for để lặp qua danh sách và lấy các giá trị ra khỏi các thuộc tính. Đây là một mẫu của JSON trở về:Lặp qua đối tượng JSON Danh sách

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

Vì vậy, tôi đang cố gắng để trích xuất nội dung sử dụng một cái gì đó như thế này:

function PrintResults(result) { 

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

Làm thế nào nên này được thực hiện?

+0

Trong Java, bạn cần ánh xạ Json vào POJO. Khi thực hiện xong, bạn có thể thử lại bất kỳ giá trị nào.Nếu Danh sách của nó sau đó lặp lại (vòng lặp) nó và nhận được giá trị json thông qua đối tượng – Pavan

Trả lời

51

có cùng một vấn đề ngày hôm nay, chủ đề của bạn đã giúp tôi vì vậy đây đi giải pháp;)

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

Cảm ơn bạn. Đây là kết luận mà tôi cũng đã đến. Đây là một bài đăng tuyệt vời có giải pháp chi tiết. http://elegantcode.com/2009/05/04/jquery-ajax-with-class-arrays/ Hy vọng điều này sẽ giúp người khác. – Nick

+0

liên kết trong nhận xét ở trên đã chết – seinecle

+2

liên kết trong nhận xét ở trên là undead – kojow7

64

Hãy cẩn thận, d là danh sách.

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

Cảm ơn .. nhưng điều đó cũng không trả về bất cứ điều gì. – Nick

+1

Nó nên. Đúng rồi. JavaScript phân biệt chữ hoa chữ thường. EmployeeName –

16

Kết thúc! Hãy thử điều này:

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

Cập nhật:

Nếu kết quả của bạn là thực sự là một mảng của một đối tượng, sau đó bạn có thể phải làm điều này:

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

Hoặc nếu bạn muốn để lặp qua mỗi kết quả trong mảng nếu có nhiều hơn, hãy thử:

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

Điều này khiến tôi gần gũi hơn .. Nó vẫn chỉ là cảnh báo với [đối tượng đối tượng], [đối tượng] .... – Nick

8

Vì bạn đang sử dụng jQuery, bạn cũng có thể sử dụng từng metho d ... Ngoài ra, có vẻ như mọi thứ đều là giá trị của thuộc tính 'd' trong đối tượng JS này [Ký hiệu].

$.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); 
    }); 
}); 

Điều đó sẽ hiệu quả. nếu không, thì có thể bạn có thể cho chúng ta ví dụ dài hơn về JSON.

Chỉnh sửa: Nếu không có công cụ nào trong số này hoạt động thì tôi bắt đầu nghĩ có thể có điều gì đó sai với cú pháp JSON của bạn.

+0

Tôi tìm thấy giải pháp theo cách cứng (không phải JQuery). Tôi sẽ thử cái này càng sớm càng tốt. Tôi thích làm theo cách của bạn. Tôi chắc chắn sẽ đăng giải pháp. – Nick

+0

Vì vậy, điều này rất, rất gần. Bây giờ tôi đang lặp qua mảng các đối tượng. Trong FireBug tôi có thể thấy các giá trị trong thuộc tính nhưng cảnh báo chỉ trả về "Chưa xác định". Làm thế nào tôi có thể nhận được chuỗi, ngày tháng, vv trong số các thuộc tính? – Nick

15

Ở đây là:

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

mẫu JSON văn bản:

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

Tôi có cuộc gọi sau:

$('#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'); 
    }); 

Cấu trúc trở lại từ giao diện máy chủ như:

{"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

Bạn có thể thêm giải thích ngắn bằng mã không? – jonsca

+0

ở đây hãy kiểm tra liên kết sau đây hy vọng nó sẽ giúp http://encosia.com/never-worry-about-asp-net-ajaxs-d-again/ –

1

này sẽ làm việc!

$(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" }] 
       */ 
      } 
     }); 
    }); 

Điều chính là sử dụng thuộc tính giống như thuộc tính của cặp khóa-giá trị JSON.

+0

Làm thế nào về điều đó? Tôi nghĩ bây giờ nó được giải thích tốt hơn. –

+1

Tốt hơn - cũng không có tiếng la hét. Chúc may mắn! – Mogsdad

Các vấn đề liên quan