2013-04-04 124 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