2017-08-14 68 views
0

我有一個JSON字符串從我的數據庫表來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

[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 ...請幫助我。我現在被卡住了

+0

這看起來並不像有效的JSON。最後你有一個無與倫比的']'。 – Barmar

+0

我得到它是一個複製錯誤。使用jsonlint.com很好地格式化您的JSON,然後將其粘貼到代碼塊中,而不是引號,因此格式將保留。 – Barmar

回答

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); 
      } 
     } 
    }); 
} 
+0

非常好。它解決了我的問題。非常感謝你。 –

+0

boruchsiper,我面臨一個更多的問題,請做必要的事情,因爲我必須遍歷這個json的每個屬性。請看看https://stackoverflow.com/questions/45691327/how-to-traverse-each-property-of-json-string –

1

假設你有一個變量名稱爲你的對象,你可以引用它作爲鍵的空字符串。

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

嘗試運行上面的代碼通知,我們仍然可以訪問對象元素,儘管有一個空的根名稱。

1

您必須使用括號訪問根對象中的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); 
    }); 
} 
+1

非常好。你教會了我一種訪問json對象的新方法。謝謝 –

+0

Jherax,我面臨更多的問題,請做必要的事情,因爲我必須遍歷此json的每個屬性。請看看https://stackoverflow.com/questions/45691327/how-to-traverse-each-property-of-json-string –