Javascript 如何访问json字符串的属性

Javascript 如何访问json字符串的属性,javascript,jquery,asp.net,json,ajax,Javascript,Jquery,Asp.net,Json,Ajax,我的数据库表中有一个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":"A

我的数据库表中有一个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);
            }
        }
    });
}
函数Get_DataTable(){ $.ajax({ url:“GridView\u JqueryFunctionality.aspx/CallDataTable\u EmptyRootName”, 类型:“POST”, 数据:“{}”, contentType:“应用程序/json;字符集=utf-8”, 数据类型:“json”, 成功:功能(数据){ alert(data.d)//显示json很好 var MyData=$.parseJSON(data.d); 对于(i=0;i 我的Webmethod

[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 "";
    }
}
[WebMethod(true)]
公共静态字符串CallDataTable_EmptyRootName(){
列表类别=新列表();
clsMenu objMenu=新的clsMenu();
DataTable dt=新的DataTable();
objMenu.GetAllMenu(dt);
如果(dt.Rows.Count>0){
字符串jsonString=ConversionExtension.DataTabelToJson(dt);
返回jsonString.ToString();
}否则{
返回“”;
}
}

它给了我
未定义的
未定义的
。。。请帮帮我。我现在被卡住了

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

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[""]);

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

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

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[""]);

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

您必须使用括号访问根对象中的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);
  });
}

您必须使用括号访问根对象中的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);
  });
}
试试这个:

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);
            }
        }
    });
}
函数Get_DataTable(){ $.ajax({ url:“GridView\u JqueryFunctionality.aspx/CallDataTable\u EmptyRootName”, 类型:“POST”, 数据:“{}”, contentType:“应用程序/json;字符集=utf-8”, 数据类型:“json”, 成功:功能(数据){ alert(data.d)//显示json很好 var MyData=$.parseJSON(data.d)[“”]; 对于(i=0;i试试这个:

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);
            }
        }
    });
}
函数Get_DataTable(){ $.ajax({ url:“GridView\u JqueryFunctionality.aspx/CallDataTable\u EmptyRootName”, 类型:“POST”, 数据:“{}”, contentType:“应用程序/json;字符集=utf-8”, 数据类型:“json”, 成功:功能(数据){ alert(data.d)//显示json很好 var MyData=$.parseJSON(data.d)[“”]; 对于(i=0;i这看起来不像是有效的JSON。您的结尾有一个不匹配的
]
。我发现这是一个复制错误。使用jsonlint.com对JSON进行良好的格式化,然后将其粘贴到一个代码块中,而不是一个引号中,这样格式就会保留下来。这看起来不像是有效的JSON。您的结尾有一个不匹配的
]
。我发现这是一个复制错误。使用jsonlint.com将JSON格式设置得很好,然后将其粘贴到这里的代码块中,而不是引号中,这样就可以保留格式。非常好。它解决了我的问题。非常感谢bro.boruchsiper,我还面临一个问题,请做必要的工作,因为我必须遍历此json的每个属性。请好好看看。它解决了我的问题。非常感谢bro.boruchsiper,我还面临一个问题,请做必要的工作,因为我必须遍历此json的每个属性。请好好看看。您教会了我一种访问json对象的新方法。感谢Herax,我还面临一个问题,请做必要的工作,因为我必须遍历这个json的每个属性。请好好看看。您教会了我一种访问json对象的新方法。感谢Herax,我还面临一个问题,请做必要的工作,因为我必须遍历这个json的每个属性。请看一看