2011-12-16 13 views
1

私は、次のJSONを持っている:匿名JSON属性にアクセスするには?

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

と値 "198" はダイナミックで変化します。どのように私は次のコードで「198」を知らなくても簡単に「ファーストライン」プロパティにアクセスすることができます

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

階層のレベルでは、「198」だけが鍵でしょうか? –

+0

ドミニク、しかし、私は常に最初のキーにアクセスしたいと思います。 – user971956

+0

@ user971956:JSONのキーには注文があるかもしれませんが、JavaScriptオブジェクトに変換されると注文されないので、「最初のプロパティ」にアクセスすることはできません。 Btw。あなたの質問はJSONとは関係ありませんが、JavaScriptオブジェクトとは関係ありません。 –

答えて

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をすべてのブラウザで使用するには、json2.jsからhereまでのDouglas Crockford氏が必要です。すべてのブラウザで動作するように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これを試してみてください。クロスブラウザー互換性対策とデータに動的にアクセスできるようになりました。

+0

jsFiddle please ... –

+0

@ imeVidas added jsFiddle – benekastah

+0

ありがとう、今私は潜在的にキーを持っている、私はサブ値をつかむためにすべてのメンバーを反復する必要がありますか?私がその名前を知ったのですぐにそれらにアクセスしてください? – user971956

1

具体的にのレベルをLinesに設定する場合を除いて、どのような順序で出力されるかを保証する方法はありません。

for..inまたはObject.keysを使用すると、プロパティを列挙して、最初の繰り返しでループから抜け出すことができます。しかし、やはり、彼らがどのような順序で出てくるかは保証されていません。実装に依存します。

{ 
    "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 ...)

1

ちょうど行います。あなたはキーがどうなるかわからない場合

関連する問題