2017-01-05 6 views
-3
data:{ 
key1:{ 
    child1:{}, 
    child2:{} 
} 
key2:{ 
    child21:{} 
} 
} 

key2の位置についてわからないときに、どのようにkey2の子を取得できますか?javascriptを使用してjsonデータ内のキーを検索する

+4

これはオブジェクトです。キーを使用してください。 –

+2

'data.key2.child21' ...または' data ["key2"] ["child21"] '設計時にキーを知らないと変数を使うことができます。 – brso05

+2

ポジションはどういう意味ですか? –

答えて

0
var keys = Object.keys(data); 

これは、キー名の文字列の配列を返します。

var childnames = Object.keys(data[key2]); 

あなたはでそれは子供たちのしているそれらのオブジェクトの配列にこれを回すことができる::EDITはたぶんこのことができます?:

var key2children = []; 
for(var i=0; i< childnames.length; i++){ 
    key2children.push(data[key2][cildnames[i]); 
} 

私は特にあなたが必要だと思う["key1", "key2"]

//To get the children of an object 
function getChildObjects(tgtobj){ 
    var objchildren = []; 
    objectkeys = Object.keys(tgtobj); 
    for(var i=0; i< objectkeys.length; i++){ 
     key2children.push(tgtobj[objectkeys[i]); 
    } 
    return objectchildren; 
} 

//This could be used to get the children of a child object in a function like this: 
function getChildOjectsOfChildByName(tgtobj, name){ 
    return getChildObjects(tgtobj[name]); 
} 

//usage example: 
var key2childojects = getChildOjectsOfChildByName(data, "key2"); 
+0

この検索がchild21のプロパティの場合はどうなりますか?同じコードは機能しません。 – user3738874

+0

データの中にあるオブジェクトの名前を引数として取る関数を作ることができます...私はそれを作るでしょう。 – Grallen

+0

。これはあなたのニーズに合っていますか? – Grallen

0

入れ子のキーを取得するには、forループと再帰を使用する必要があります。

function searchObj(obj, searVal){ 
    for (ii in obj){ 
     if(ii === searVal){ 
      console.log(ii, ' -- my key'); 
     } else{ 
      console.log(ii, ' -- no key here'); 
      searchObj(obj[ii], searVal); 
     } 
    } 
} 
searchObj(data, 'child21'); 
+0

child21が配列の場合はどうなりますか? – user3738874

+0

Child21は任意の有効な値を持つことができます。 Child21は、データオブジェクトのキー/プロパティです。それはJSON文字列です。配列にすることはできません。 –

+0

質問の私の理解から、オブジェクトの特定のキー/プロパティを見つけようとしています。それが配列かどうかを判断しようとしているなら、それを同様に追加することができます。 –

関連する問題