我有以下JSON:
{
"Files": {
"Lines": {
"198": {
"firstline": "sometext"
}
}
}
}
,值“198”是动态的并且会发生变化。如何在不知道以下代码中的“198”的情况下轻松访问“firstline”属性:
var schema = JSON.parse(fileContents);
console.log(schema.Files.Lines.????.firstline);
答案 0 :(得分:4)
有几行可以做到:
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 :(得分:1)
除非您决定在Array
级别专门使用Lines
,否则无法保证它们会以什么顺序出现。
使用for..in
或Object.keys
,您可以枚举属性,并在第一次迭代时退出循环。但同样,不能保证它们会出现什么样的顺序,这取决于实施。 (虽然很多次,它会是你期望的)
答案 2 :(得分:1)
如果您不知道密钥是什么,将数据作为数组返回可能会有用:
{
"Files": {
"Lines": [{
"id": "198",
"firstline": "sometext"}]
}
}
var schema = JSON.parse(fileContents);
console.log(schema.Files.Lines[0].firstline); //sometext
答案 3 :(得分:1)
这样做:
schema.Files.Lines.properties[0].firstline
现场演示: http://jsfiddle.net/KBj2G/
(是的,'properties'
getter必须手动实现......)