2012-01-03 84 views
2

可能重複:
Getting JavaScript object key list
How to iterate json data in jquery如何從對象中獲取成員名稱?

我有這樣一個JSON:

var myJSONObject = { 
        "flowers": [ 
         {"id":"1","name":"Red Flower","url":"flower_1.png"}, 
         {"id":"2","name":"Purple Flower","url":"flower_2.png"}, 
         {"id":"3","name":"Yellow Flower","url":"flower_3.png"}, 
         {"id":"4","name":"Violet Flower","url":"flower_4.png"}, 
         {"id":"5","name":"Purple Flower","url":"flower_5.png"} 
        ], 
        "bouquet": [ 
         {"first":[1,2,3,4,5,6]}, 
         {"second":[1,2,3,4,5,6]}, 
         {"third":[1,2,3,4,5,6]} 
        ] 
      }; 

現在我questin是我怎麼能僅拉出的名字「花束」的成員......進入陣列。 看起來像這樣的東西:[「第一」,「第二」,「第三」]?

+0

這與JSON不相關,JSON是一種數據交換格式,但僅適用於JavaScri pt對象。 – 2012-01-03 16:46:03

+0

@FelixKling和John,這個問題與其他人不同。如果您沒有注意到:指定的密鑰是未知的。解決這個問題需要雙循環。 – 2012-01-03 16:50:04

+0

@Rob W:不這麼認爲:'for(var p in myJSONObject.bouquet)...' – 2012-01-03 16:53:23

回答

3

在最新版的Firefox瀏覽器,可以使用下列(所謂Array-comprehensions):

var list = [Object.keys(i)[0] for each (i in myJSONObject.bouquet)]; 

如果Object.keys支持,使用:

var list = [];      // Create list 
for (var i=0; i<myJSONObject.bouquet.length; i++) { 
    var keys = Object.keys(myJSONObject.bouquet[i]); //List keys 
    list.push(keys[0]);    // Store first named key 
} 

在其他瀏覽器,你可以使用:

var list = [];      // Create list 
for (var i=0; i<myJSONObject.bouquet.length; i++) { 
    var key = myJSONObject.bouquet[i]; 
    for (var j in key) {    // Get the first named key 
     list.push(j);     // Store named key 
     break;      // <--- First named key, so break loop 
    } 
} 
+0

是否有es:數組理解的和聲版本 – Raynos 2012-01-05 17:57:01

+0

[Array comprehensions](http://wiki.ecmascript.org/doku.php?id=harmony:array_comprehensions)列在[提案](http:// wiki .ecmascript.org/doku.php?id = harmony:proposals)頁面。 – 2012-01-05 18:05:48

1
for(var i=0; i< myJSONObject["bouquet"].length; i++) 
{ 
    var o = myJSONObject["bouquet"][i]; 
    document.write(Object.keys(o) + "<br>"); 
} 

輸出:第一第二第三

JSFiddle for confirmation

+0

已經找到答案...但是謝謝大家! – BorisD 2012-01-03 17:20:17

+0

@BorisD謹防這個問題的答案。 'Object.keys'返回一個數組。如果您要以與答案類似的方式創建列表,您將獲得一個數組,如:[['First'],['Second'],['Third']]'。如果要直接對列表中的元素執行字符串操作(如'charAt'),這很重要。 – 2012-01-03 17:24:38

0

,如果你是在支持現代ECMA增加的環境中,你可以使用Object.keys(文檔here),也可填充工具您自己如果你需要,像這樣:

function getKeys(obj) { 
    var ret = [], prop; 

    for (prop in obj) { 
     if (Object.prototype.hasOwnProperty.call(obj, prop)) { 
      ret.push(prop); 
     } 
    } 

    return ret; 
}; 

用法:

var keys = getKeys({ foo: "a", bar: "b" }); // -> ['foo', 'bar'] 

希望幫助!乾杯。