【问题标题】:how to access properties of json string如何访问json字符串的属性
【发布时间】:2017-08-14 20:45:50
【问题描述】:

我有一个来自我的数据库表的 JSON 字符串,但它的根元素名称为空

{"": [
  {"ID":18,"MenuName":"dsadasdasd","IsActive":"InActive"},
  {"ID":17,"MenuName":"Karachi","IsActive":"Active"},
  {"ID":2,"MenuName":"User Management","IsActive":"Active"},
  {"ID":1,"MenuName":"Home","IsActive":"Active"}
]}

我正在尝试使用以下 jquery ajax 调用方法访问此 JSON

function Get_DataTable() {
    $.ajax({
        url: "GridView_JqueryFunctionality.aspx/CallDataTable_EmptyRootName",
        type: "POST",
        data: '{}',
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            alert(data.d) // showing json is fine
            var MyData = $.parseJSON(data.d);
            for (i = 0; i < Object.keys(MyData).length; i++) {
                alert(MyData[i].ID + ' : ' + MyData[i].MenuName);
            }
        }
    });
}

我的网络方法

[WebMethod(true)]
public static string CallDataTable_EmptyRootName(){    
    List<Category> Categories = new List<Category>();
    clsMenu objMenu = new clsMenu();
    DataTable dt = new DataTable();
    objMenu.GetAllMenu(dt);
    if (dt.Rows.Count > 0){
        string jsonString = ConversionExtension.DataTabelToJson(dt);            
        return jsonString.ToString();           
    }else{
        return "";
    }
}

它给了我undefinedundefined...请帮助我。我现在卡住了

【问题讨论】:

  • 这看起来不像是有效的 JSON。最后你有一个无与伦比的]
  • 我知道这是复制错误。使用 jsonlint.com 很好地格式化您的 JSON,然后将其粘贴到代码块中,而不是引用,因此格式将被保留。

标签: javascript jquery asp.net json ajax


【解决方案1】:

试试这个:

function Get_DataTable() {
    $.ajax({
        url: "GridView_JqueryFunctionality.aspx/CallDataTable_EmptyRootName",
        type: "POST",
        data: '{}',
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            alert(data.d) // showing json is fine
            var MyData = $.parseJSON(data.d)[""];

            for (i = 0; i < MyData.length; i++) {
                alert(MyData[i].ID + ' : ' + MyData[i].MenuName);
            }
        }
    });
}

【讨论】:

  • 非常好。它解决了我的问题。非常感谢兄弟。
  • boruchsiper,我还面临一个问题,请做必要的事情,因为我必须遍历这个 json 的每个属性。请看stackoverflow.com/questions/45691327/…
【解决方案2】:

假设你的对象有一个变量名,你可以用一个空字符串作为键来引用它。

var a = {
  "": [
    {
      "ID": 18,
      "MenuName": "dsadasdasd",
      "IsActive": "InActive"
    },
    {
      "ID": 17,
      "MenuName": "Karachi",
      "IsActive": "Active"
    },
    {
      "ID": 2,
      "MenuName": "User Management",
      "IsActive": "Active"
    },
    {
      "ID": 1,
      "MenuName": "Home",
      "IsActive": "Active"
    }
  ]
}
console.log(a[""]);

尝试运行上面的代码,尽管根名称为空,我们仍然可以访问对象元素。

【讨论】:

    【解决方案3】:

    您必须用括号访问根对象中的 no-name 属性,然后遍历项目数组。

    success: function(response) {
      var data = $.parseJSON(response.d);
      var list = data[""];
      list.forEach(function(item, i) {
        console.log(item);
        console.log(item.ID, ' -> ', item.MenuName);
      });
    }
    

    【讨论】:

    • 非常好。你教会了我一种访问 json 对象的新方法。谢谢
    • Jherax,我还面临一个问题,请做必要的事情,因为我必须遍历这个 json 的每个属性。请看stackoverflow.com/questions/45691327/…
    猜你喜欢
    • 2023-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    相关资源
    最近更新 更多