2013-04-04 123 views
6

如何反序列化下面的這個json對象?jquery如何反序列化json對象

[{"id":"67","name":"TestString"}] 

我想下面這樣做,但不可能成功......

success: function (data, status) { 
      $.each(data, function (dt) { 

       var mydata = data.d; 

       alert(mydata); // returns [{"id":"67","name":"TestString"}] 

       $("#txt_speciality").tokenInput("add", mydata.id); 
      }); 
} 

這裏是我創建的JSON對象的方式

[WebMethod] 
public static string get_specialities(string ProfessionalID) 
{ 
    Database db = DatabaseFactory.CreateDatabase("Connection String2"); 
    DbCommand dbCommand; 
    dbCommand = db.GetStoredProcCommand("Select_Professionals_Speciality"); 
    db.AddInParameter(dbCommand, "prof_id", DbType.Int16, Convert.ToInt16(ProfessionalID)); 
    IDataReader dr = db.ExecuteReader(dbCommand); 
    //[{ id: 3, name: "test3" }] 
    string return_str="["; 
    int i = 0; 
    while (dr.Read()) { 
     if (i > 0) 
      return_str += ","; 
     return_str += "{\"id\":\"" + dr["SpecialtyID"].ToString().Trim() + "\",\"name\":\"" + dr["SpecialtyName"].ToString().Trim() + "\"}"; 
     i++; 
    } 
    return_str += "]"; 
    return return_str; 
} 
+2

看起來你可能是JSON編碼的服務器 - 雙側。 – 2013-04-04 14:18:56

+0

您是將它作爲JSON還是作爲文本檢索?請分享您的AJAX呼叫的其餘部分。 – Blazemonger 2013-04-04 14:19:18

+0

我正在以文本形式檢索 – 2013-04-04 14:19:43

回答

16

你可以做到這一點有:

var mydata; // [{"id":"67","name":"TestString"}] 

var json = $.parseJSON(mydata); 

json的變量將包含反序列化JSON對象

+3

http://api.jquery .com/jQuery.parseJSON/- 如果可用,將使用'JSON.parse()',如果不是,則使用jQuery自己的代碼。 – Blazemonger 2013-04-04 14:23:49

5

我想這是你所需要的:JSON.parse(data)

success: function (data, status) { 
      data = JSON.parse(data); 
      $.each(data, function (dt) { 

      var mydata = data.d; 

      alert(mydata); // returns [{"id":"67","name":"TestString"}] 

      $("#txt_speciality").tokenInput("add", mydata.id); 
     }); 
} 
0

If你正在以文本方式檢索你的數據,它不是在到達時被解析爲一個數組,而是作爲一個字符串。

在您的$.ajax()選項中使用.getJSONdatatype:json來解決此問題。

0
var object = JSON.parse(data); 

現在你卡恩訪問所有atributes。例如object.id