2011-12-16 77 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 ......)