2010-03-20 62 views
0

我有一個asp.net頁面,它將對象列表作爲json字符串返回給ajax請求。該字符串如下:如何訪問JSON數組格式的字符串

[ 
    {"Name":"Don","Age":23,"Description":"Tall man with no glasses"} 
    ,{"Name":"Charlie","Age":24,"Description":"Short man with glasses"} 
] 

我想單獨訪問每個字段,喜歡的人,他的年齡,他的描述等

我如何能做到這一點的名字嗎?我正在使用JQuery進行客戶端腳本編寫。

爲了進一步澄清,這裏是服務器端的C#代碼 -

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Request["field1"] != null) 
    {    
     createPersonList(); 
    } 
} 

private void createPersonList() 
{ 
    List<Person> PersonList = new List<Person>(); 

    Person Atiq = new Person("Atiq Hasan Mollah", 23, "Whassap Homie"); 
    Person Sajib = new Person("Sajib Mamud", 24, "Chol kheye ashi"); 

    PersonList.Add(Atiq); 
    PersonList.Add(Sajib); 

    string json = JsonConvert.SerializeObject(PersonList); 

    Response.Clear(); 
    Response.Write(json); 
    Response.End(); 
} 

的客戶端JavaScript代碼如下 -

$(function() 
{ 
    $("#SimpleButton").click(function() 
    { 

     $.post("Default.aspx", {field1: $("#field1").val()},function(data) 
     { 
      data = $.trim(data); 
      $("#field2").val(data); 

      var myObject = eval('(' + data + ')'); 

      $(data).each(function(index, person) 
      { 
       alert( 'Name: ' + person.Name + 
         ' Age: ' + person.Age + 
         ' Description: ' + person.Description 
        ); 
      }); 
     }); 
    }); 
}); 

現在,如果我不使用「EVAL 「我自己,那我怎麼能通過從服務器端陣列列表,然後解析它使用javascript?

+0

我會建議你避免調用'eval'自己的方法。如果使用jQuery執行AJAX查詢,它將處理將表示JSON編碼對象的服務器響應轉換爲對象本身。 – 2010-03-20 09:59:24

+0

我試圖不使用「eval」。相反,我試圖使用jQuery的「$ .getJSON」方法。但是當服務器返回JSON編碼的字符串時,如果我嘗試訪問它,那麼它會產生一些錯誤。我提供服務器端代碼以及整個客戶端代碼以供進一步說明。 – 2010-03-20 10:07:59

+0

如果你想使用'$ .post'並且仍然讓jQuery自動解析JSON,你可以通過第四個參數來告訴它:'$ .post(「Default.aspx」,{field1:$(「#field1」)) .val()},函數(data){...},「json」);'。我會更新我的答案以反映這一點。 – 2010-03-20 12:49:49

回答

2

你可以問jQuery來自動解析JSON並返回一個JavaScript對象,而不是字符串:

var people = $.getJSON('http://example.com/path/to/page'); 

如果你想使用POST而非GET,你可以提供一個數據類型作爲第四個參數:

$.post("Default.aspx", {field1: $("#field1").val()}, function(data) { ... }, "json"); 

然後,您可以訪問它,就像你一個正常的對象:

$.each(people, function(function (i, person) { 
    $('#people').append($('<p>').text(person.Name)); 
} 
+0

這是我通常這樣做的方式。 – 2010-03-20 10:24:52

1

假設你已經擁有的人數組,你可以使用each方法來遍歷的元素:

var persons = [ 
    {"Name":"Don","Age":23,"Description":"Tall man with no glasses"}, 
    {"Name":"Charlie","Age":24,"Description":"Short man with glasses"} 
]; 

$(persons).each(function(index, person) { 
    alert('Name: ' + person.Name + 
      ' Age: ' + person.Age + 
      ' Description: ' + person.Description 
    ); 
}); 
+0

嗯,我只需要第一部分,實際上,我的意思是如何將字符串轉換爲實際的數組,但我自己管理它。但是你的回答告訴了我一個我以前不知道的新東西:使用jQuery訪問像這樣的列表。謝謝....... :) – 2010-03-20 10:00:40