2013-07-10 69 views
1

一個JSON文件,我有這個JSON文件:解析使用Javascript/jQuery的

{ 
"guest": { 
    "permissions": { 
     "webportal": [ 
      "access", 
      "modify" 
     ], 
     {…} 
     "test/dashboard": [ 
      "access" 
     ] 
    }, 
    "users": [ 
     "guest" 
    ], 
    "time_out": "3600000" 
}, 
"administrator": { 
    "permissions": { 
     "webportal": [ 
      "monitoring", 
      "access", 
      "modify" 
     ], 
     {…} 
     "test/settings": [ 
      "access", 
      "modify" 
     ] 
    }, 
    "users": [ 
     "admin" 
    ], 
    "time_out": "3600000" 
    } 
} 

我需要做的僅僅是拿第一項並將它們放入一個選擇框。因此,例如:

客人,在「用戶」部分下Administrator和任何東西,可能是「N」條目數,需要被放入一個選擇是這樣的:

<select id='JSONFile'> 
    <option value='administrator'>administrator</option> 
    <option value='guest'>guest</option> 
    <option value='useradmin'>useradmin</option> 
</select> 

的平衡JSON文件中的數據需要放入數組中,以便稍後可以訪問它並將其轉儲爲CheckBoxes的值。

例如:在客人:權限:WebPortal - there's ACCESS and MODIFY。這是唯一的兩個權限。所以訪客要訪問WebPortal;他們必須擁有訪問權限。編輯,修改。得到它?

所以我是新來的這個東西,只需要儘可能簡單。

哦,是的,我提到我們使用​​和下拉必須是KO可觀測陣列?但每次只有一件事。

第二部分稍後介紹。

Ciao!

+0

你如何得到這個JSON?它是靜態的還是通過AJAX調用進行檢索? – DevlshOne

+0

這是DYNAMIC ...因此,用戶可以添加用戶的adInfinitum數量,但Admin和Guest永遠不能被刪除。只有GUEST的屬性可以改變以及USER定義的項目。 –

回答

0

要獲取並顯示select元素中最高級別對象的鍵,請使用以下代碼。

var optionValues = []; 

var data = JSON.parse(JSONdata);  //this parses your data securely into an object that you can easily use 
for(option in selection) {    //goes through the highest level keys of the object 
    if (data.hasOwnProperty(option)) { //this ignores the default object properties (things you don't want) 
    if(option === 'users')    //takes into account user titles 
     JSONdata['users'].forEach(function(userTitle) { //iterates over all of the user data and appends usertitles to the array 
     optionValues.push('user'+userTitle); 
     }); 
    else {       // for the default roles like admin 
     optionValues.push(option);  //this puts all of the non-user keys into an array 
    } 
    } 
} 

這將輸出=>['guest','administrator','useradmin']你上面貼的數據。 然後,您可以使用document.createElement和document.appendChild爲所有這些選項創建選項,並將它們放置在文檔中的select元素下。

+0

謝謝,像一個魅力.... –

0

我瞭解淘汰賽映射插件後,我的生活與淘汰賽變得更容易。

http://knockoutjs.com/documentation/plugins-mapping.html

通過這個,您可以從JSON數據自動創建模型。

viewModel = ko.mapping.fromJS(data); 

一旦進入viewModel,您可以迭代到您的心中。您可能需要將根節點添加到Json數據中,以便更容易地遍歷角色。