2012-01-03 53 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'] 

希望帮助!干杯。