如何按列引用JSON对象元素

时间:2013-07-29 01:47:12

标签: c# json object serialization

我正在从网上带有单行数据(从SP返回的行)的样本中抓取一些代码,并使用JSON对象序列化程序将其发送回客户端aspx javascript页面。为了让您了解数据的构建方式......

    public static string GetLogEntry(DataTable table, string id)
    {
        JavaScriptSerializer jss = new JavaScriptSerializer();
        List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
        Dictionary<string, object> row;

       foreach (DataRow dr in table.Select("UID =" + id))
       // foreach (DataRow dr in table.Rows)
        {
            row = new Dictionary<string, object>();
            foreach (DataColumn col in table.Columns)
            {
                row.Add(col.ColumnName, dr[col]);
            }
            rows.Add(row);
        }
       var json = jss.Serialize(rows);
       return json;

我知道我在这里有一个不必要的循环,因为这个特定的SP只能返回一行。我将在下一章中讨论这个问题。我真正的问题是我不明白如何提取我需要的数据。

我的客户端循环正在返回数据,但我很难单独引用特定的列数据。

success: function (json) {    //ajax call success function
   var obj = jQuery.parseJSON(json);    // this line isn't really doing anything right now
   eval("var datax = " + json); 
   for (var propertyName in $(datax)[0]) {
      alert('data: ' + propertyName ); }    //this returns only the column names


   $(data).each(function (key, val) {

   for (var propertyName in val) {
      alert('data: ' + val[propertyName]); }

所以我想要做的是按照我在其他示例中看到的列名访问元素....

alert(json.columnName) //returns undefine.

提前感谢您的时间。

1 个答案:

答案 0 :(得分:0)

根据您的ajax调用的方式,成功处理程序中的变量json已经是一个javascript对象文字。

function successHandler(resp){
    var data = resp;

    $.each(data, function (index, row){
        var key;
        foreach (key in row){
            if (row.hasOwnProperty(key)){
                console.log(key, row[key]);
            }
        }
    });
}

$.ajax({
    type: "POST",
    contentType: "application/json; charset=utf-8",
    url: "some url",
    data: "{}",
    dataType: "json"
}).done(successHandler);

如果您可以发布服务器返回的数据,那将会有很大帮助。这将使我们了解json的结构。

因此,不应该使用eval或解析服务器响应。

顺便说一句,没有JSON object这样的东西。 JSON只是一种序列化和传递javascript对象文字的格式。以下,

var data = new List<Dictionary<string, object>> 
           {
                new Dictionary<string, object>
                {
                    { "Col1", 1.0}, { "Col2", 2.0}
                },
                new Dictionary<string, object>
                {
                    { "Col1", 1.1}, { "Col2", 2.2}
                },
           };

将按照JSON格式转换为以下字符串:

"[{\"Col1\":1,\"Col2\":2},{\"Col1\":1.1,\"Col2\":2.2}]"

jQuery ajax将自动解析此字符串并将结果数组传递给成功处理程序。为此,需要告诉jquery期望json数据,服务器需要发回一个mimetype application/json; charset=utf-8的字符串