【问题标题】:how to reference a JSON object element by column如何按列引用 JSON 对象元素
【发布时间】:2013-07-29 01:47:12
【问题描述】:

我正在从网络上的样本中抓取一些代码,这些代码获取单行数据(从 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.

提前感谢您的宝贵时间。

【问题讨论】:

    标签: c# json object serialization


    【解决方案1】:

    根据您的 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 的字符串

    【讨论】:

    • 为这个信息丰富的回复付出了很多努力。正如@Amith 所说,我不需要使用eval。在var obj = jQuery.parseJSON(json); 行之后,我能够像这样获得我需要的数据:alert(obj[0].columnName)。和alert(json.columnName) 返回未定义。更多细节: json 数据以以下格式返回:[{\"columnName\":variable,\"columnName\":variable }]"
    猜你喜欢
    • 2017-04-23
    • 1970-01-01
    • 2016-04-10
    • 2018-07-06
    • 2011-05-13
    • 1970-01-01
    • 2021-05-24
    • 2019-05-02
    • 2014-02-01
    相关资源
    最近更新 更多