jQuery如何反序列化JSON对象

17

你如何对下面的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编码。 - Kevin B
你是将它作为JSON还是文本检索?请分享你的AJAX调用的其余部分。 - Blazemonger
我正在以文本形式检索。 - Arif YILMAZ
1
与其自己编写 Json(在您的 c# 中),您可能会发现使用 JSON.Net 这样的工具更容易且更少出错:http://james.newtonking.com/projects/json-net.aspx - Liam
.NET实际上包含用于JSON处理的类:http://msdn.microsoft.com/ru-ru/library/system.web.script.serialization.javascriptserializer.aspx - Tommi
5个回答

28

您可以使用以下方式完成:

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

var json = $.parseJSON(mydata);

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


5
如果可用,这将使用 JSON.parse(),否则将使用 jQuery 自己的代码。 - Blazemonger

7

我猜这就是你需要的: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);
      });
}

2
如果您真的想使用jQuery,这里有一个函数。然而,任何现代浏览器都有此功能。
JSON.parse()

1
如果您以文本形式检索数据,则在到达时,它不会被解析为数组,而是作为字符串。
请使用.getJSON或在$.ajax()选项中使用datatype:json来解决此问题。

0
var object = JSON.parse(data);

现在您可以访问所有属性。例如,object.id


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接