获得第一个JSON属性

时间:2009-07-12 19:29:59

标签: javascript json

有没有办法获取JSON对象的第一个属性的名称?

我想做这样的事情:

var firstProp = jsonObj[0];

编辑:我正在获取一个JSON对象,其中包含带有图片网址的数组类别。

像这样:

{
  "category1":["image/url/1.jpg","image/url/2.jpg"],
  "category2":["image/url/3.jpg","image/url/4.jpg"]
}

然后我遍历对象以插入图像,而我真正想要的只是一种优雅的方式来查看首先插入的类别。起初我刚刚做了

for (var cat in images) {
    if (i==0) firstCat = cat;
    ...
}

但有些人觉得“觉得”难看......所以这基本上只是一个优雅的问题:p

5 个答案:

答案 0 :(得分:33)

对象属性的顺序不是保证与放入它们的方式相同。但实际上,所有主流浏览器都会按顺序返回它们。所以,如果你依赖这个就好......

var firstProp;
for(var key in jsonObj) {
    if(jsonObj.hasOwnProperty(key)) {
        firstProp = jsonObj[key];
        break;
    }
}

另请注意,有关排序的bug in Chrome,在某些边缘情况下,它不会按照提供的方式对其进行排序。就未来的变化而言,实际上这个机会实际上很小,因为我相信这已经成为标准的一部分,所以如果对此有任何支持只会成为正式的。

但是,考虑到所有事情,如果你真的,非常,绝对,积极地想要确定它将以正确的顺序使用数组。否则,上面的情况很好。

相关问题:Elements order - for (… in …) loop in javascript

答案 1 :(得分:24)

console.log(jsonObj[Object.keys(jsonObj)[0]]);

答案 2 :(得分:14)

没有“第一”财产。对象的属性是无序的。

你可以获得JS引擎决定首先提供循环的任何内容。

function maybe_first_in_object(ob) {
    for (var props in ob) {
        return prop;
    }
}

...但如果订单很重要,请使用数组而不是对象。

答案 3 :(得分:2)

好问题。除了在for-in循环中迭代之外,我不知道任何方式。你只需要迭代一次。为安全起见,请确保它是已知属性[more info]。

for (var propName in jsonObj) {
    if (jsonObj.hasOwnProperty(propName)) {
        return propName;    // or do something with it and break
    }
}

已编辑,要明确表示您正在迭代属性名称,而不是其值。

答案 4 :(得分:1)

使用jQuery时,您还可以使用$.each迭代JSON对象。看起来比使用for - 循环

更清晰的IMO
var items = {
    'item1': 'content',
    'item2': 'content',
    'item3': 'content'
}

$.each(items, function() { 
    console.log($(this)[0])
})