15

如何反序列化下面的这个 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;
}
4

5 回答 5

27

你可以这样做:

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

var json = $.parseJSON(mydata);

json 变量将包含反序列化的 json 对象

于 2013-04-04T14:22:30.953 回答
6

我认为这是您需要的: 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);
      });
}
于 2013-04-04T14:20:26.563 回答
2

如果你真的想使用 jQuery,这里是功能但是,任何当代浏览器都有功能

JSON.parse()
于 2013-04-04T14:21:05.723 回答
1

如果您以文本形式检索数据,则它不会在到达时被解析为数组,而是作为字符串。

使用.getJSONdatatype:json在您的$.ajax()选项中解决此问题。

于 2013-04-04T14:20:58.100 回答
0
var object = JSON.parse(data);

现在您无法访问所有属性。例如 object.id

于 2013-04-04T14:21:44.240 回答