2017-02-08 51 views
3

我的問題我怎樣才能拿到鑰匙的名字和它從一個數組JSON對象中值

在我的JSON文件我有一個值是鍵/值的數組對象中的對象對。我無法輸出每個鍵名和它的值。

我的代碼

menu.json

{"themenu":[ 
    { 
     "stuff": "stuffs", 
     "pages": [ 
      {"name1": "page111"}, 
      {"name2": "page222"}, 
      {"name3": "page333"} 
     ] 
    } 
]} 

menu.js

$(function() { 
    $.getJSON('menu.json', function(data) { 
     $(data.themenu).each(function() { 
      var stuff = this.stuff; 
      alert(stuff); // alerts 'stuffs' 
      $(this.pages).each(function(key, value) { 
       var pageName = this.key; 
       var pageUrl = this.value; 
       alert(pageName + ' ' + pageUrl); 
      }) 
     }) 
    }) 
}) 

我需要什麼樣的

我要輸出的鍵的名稱及其對應的值,因此這將是相同的,因爲這...

alert('name1 page111'); 
alert('name2 page222'); 
alert('name3 page333'); 

我已經試過

我已經嘗試了幾件事包括...

$(data.pages).each(function(key, value) { 
    var pageName = this.key; 
    var pageUrl = this.value; 
}) 

......和一堆更巫術,我太尷尬發佈。

+4

嘗試'var pageName = Object.keys(this)[0],pageUrl = this [pageName]; })' – haim770

+0

@ haim770!我喜歡你如何使用變量來獲得價值!請發表回答,以便我可以接受。 :) –

回答

2

只要使用這個代碼,它會工作。我只是改變你的代碼的一些內容,試試這個::

var json_data = {"themenu":[ 
    { 
     "stuff": "stuffs", 
     "pages": [ 
      {"name1": "page111"}, 
      {"name2": "page222"}, 
      {"name3": "page333"} 
     ] 
    } 
]}; 
$(document).ready(function() { 
// $.getJSON(json_data, function(data) { 
     $(json_data.themenu).each(function() { 
      var stuff = this.stuff; 
      alert(stuff); // alerts 'stuffs' 
      $(this.pages).each(function(key, value) { 
       $.each(this, function(key, value) { 
        var pageName = key; 
        var pageUrl = value; 
        alert(pageName + ' ' + pageUrl); 
       }); 
      }); 
     }); 
// }) 
}); 

假設var json_data有自己的數據,因爲你需要更換。

+0

嗨Rana,謝謝,這個作品很棒!我想雖然我不得不接受海姆的評論作爲答案(如果他發佈的話) –

2

您可以用vanilla JavaScript與forEach方法遍歷數組,然後使用Object.keys()檢索對象的密鑰。

var json_data = { 
 
    "themenu": [{ 
 
    "stuff": "stuffs", 
 
    "pages": [{ 
 
     "name1": "page111" 
 
    }, { 
 
     "name2": "page222" 
 
    }, { 
 
     "name3": "page333" 
 
    }] 
 
    }] 
 
} 
 

 

 
json_data['themenu'].forEach(function(menu) { 
 
    menu.pages.forEach(function(page) { 
 
    alert(Object.keys(page)[0] + ' ' + page[Object.keys(page)[0]]); 
 
    }); 
 
});

+1

謝謝邁克爾,這對我來說很好!但是,我可能會接受haim的答案(第一條評論),因爲它對原始代碼(jquery)做了最少的更改,並且非常簡潔。 –

2

當循環您的JSON和使用this.key/this.value你從字面上搜索鍵key/value(如果它是{'key': ..., 'value': ...}

$.each(this.pages, function (key, value)給你你想要的價值的數組。可以循環一次以獲得鍵/值爲文本:

var json = { 
 
    "pages": [{ 
 
    "name1": "page111" 
 
    }, { 
 
    "name2": "page222" 
 
    }, { 
 
    "name3": "page333" 
 
    }] 
 
}; 
 

 
$.each(json.pages, function(k, v) { 
 
    console.log(k, v); 
 
    $.each(this, function(key, value) { 
 
    console.log('->', key, value); 
 
    //alert(keyName + ' ' + value); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

相關問題