如何访问匿名JSON属性?

我有以下JSON:

{ "Files": { "Lines": { "198": { "firstline": "sometext" } } } } 

值“198”是dynamic变化的。 如何在不知道下面代码中的“198”的情况下轻松访问“firstline”属性:

 var schema = JSON.parse(fileContents); console.log(schema.Files.Lines.????.firstline); 

几行将做到这一点:

 var obj = JSON.parse(your_json); var lines = obj.Files.Lines; var keys = Object.keys(lines); var keyICareAbout = keys[0]; var info = lines[keyICareAbout]; 

注意:这个解决scheme依赖于一些更新的JavaScriptfunction。 要让JSON在所有浏览器中工作,您需要从这里开始 Douglas Crockford的json2.js 。 要使Object.keys在所有浏览器中都能正常工作,请使用Mozilla的JS docuentation中的Shim :

 if(!Object.keys) Object.keys = function(o){ if (o !== Object(o)) throw new TypeError('Object.keys called on non-object'); var ret=[],p; for(p in o) if(Object.prototype.hasOwnProperty.call(o,p)) ret.push(p); return ret; } 

编辑:试试这个jsfiddle 。 现在更新了跨浏览器兼容性措施和dynamic访问数据。

除非你决定在行级专门使用一个Array ,否则没有办法保证它将会出现什么样的顺序。

使用for..inObject.keys ,可以枚举属性,并在第一次迭代时退出循环。 但是,又不能保证它们会出现什么样的顺序,这取决于实施。 (虽然很多时候,这将是你所期望的)

如果你不知道密钥是什么,那么将数据作为数组返回可能是有用的:

 { "Files": { "Lines": [{ "id": "198", "firstline": "sometext"}] } } var schema = JSON.parse(fileContents); console.log(schema.Files.Lines[0].firstline); //sometext 

只要这样做:

 schema.Files.Lines.properties[0].firstline 

现场演示: http : //jsfiddle.net/KBj2G/

(是的, 'properties' getter必须手动实施…)