2011-12-16 84 views
1

我有以下的JSON:如何访问匿名JSON属性?

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

和值 “198” 是动态的,变化。我怎样才能轻松地访问“FIRSTLINE”属性不知道“198”在下面的代码:

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

'198'是该层级中唯一的关键字吗? – 2011-12-16 18:04:35

+0

多米尼克,但是我确实想要总是访问第一个键。 – user971956 2011-12-16 18:05:54

回答

3

几行就能做到:

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

注:该解决方案依赖于一些更新的JavaScript功能。要使JSON能够在所有浏览器中运行,您需要从here开始Douglas Crockford的json2.js。对于Object.keys在所有的浏览器,使用该垫片从Mozilla's JS docuentation

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。现在更新了跨浏览器兼容性度量和动态访问数据。

1

除非您决定在Lines级别专门使用Array,否则无法保证它们出来的顺序。

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

1

如果你不知道的关键是什么,它可能是有用的返回数据作为数组:

{ 
    "Files": { 
     "Lines": [{ 
      "id": "198", 
      "firstline": "sometext"}] 
    } 
} 

var schema = JSON.parse(fileContents); 
console.log(schema.Files.Lines[0].firstline); //sometext 
1

只是做这样的:

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

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

(是的,'properties'吸气剂已经被实现手动ly ......)