2017-03-20 11 views
-1

は、私は、次のJSONファイルがあると、キーの名前を知らなくても値に基づいて、JSONのキーの名前を返すことです:は、それが可能

{"attributes": 
    { 
    "blue":true, 
    "red":false, 
    "green":true, 
    "webAtt": 
     { 
     "webColor": "#EF5689", 
     "webSafe":true 
     } 
    } 
} 

をも、私は「属性」以外の任意のJSONノードを知らないと言うことができます。どのような属性が真であるかを知るにはどうすればいいですか?これも可能ですか?もしそうでなければ、それは "属性"の各子ノードに対してハードコーディングされなければならないのですか?

可能であれば、JavaScriptでこれを行いたいと思います。

編集:私は掃引するときに "websafe"ではなく "websafe"を取得したいので、webAttがそこにある理由があります。

+0

あなたのJSONが無効です。 '{'緑の 'は構文エラーを投げます。私はあなたが緑色のオブジェクトを持っていることを意味していると仮定していますか? –

+0

はい...私の悪い...これは私が実際にJavaScriptを必要としているものではなく、飛行機で作ったJSONの例です。 – Midimistro

+0

JSONの正しい構文を見てください。 – Midimistro

答えて

1

あなたはforループでこれを行うことができます。

var json = {"attributes": 
 
    { 
 
    "blue":true, 
 
    "red":false, 
 
    "green":true, 
 
    "webAtt": 
 
     { 
 
     "webSafe":true, 
 
     "webcolor":"#EF5689" 
 
     } 
 
    } 
 
}; 
 

 
for (var k in json.attributes) { 
 
    if(json.attributes[k]==true){ 
 
     console.log(k + ' ' + json.attributes[k]); 
 
    } 
 
    if(whatIsIt(json.attributes[k])=="Object"){ 
 
     for(var l in json.attributes[k]){ 
 
      if(json.attributes[k][l]==true){ 
 
      console.log(l+' '+json.attributes[k][l]); 
 
      } 
 
     } 
 
    } 
 
} 
 

 

 
//See credit below snippet 
 
var stringConstructor = "test".constructor; 
 
var arrayConstructor = [].constructor; 
 
var objectConstructor = {}.constructor; 
 
function whatIsIt(object) { 
 
if (object === null) { 
 
    return "null"; 
 
} 
 
else if (object === undefined) { 
 
    return "undefined"; 
 
} 
 
else if (object.constructor === stringConstructor) { 
 
    return "String"; 
 
} 
 
else if (object.constructor === arrayConstructor) { 
 
    return "Array"; 
 
} 
 
else if (object.constructor === objectConstructor) { 
 
    return "Object"; 
 
} 
 
else { 
 
    return "don't know"; 
 
} 
 
}

JSONオブジェクトタイプ識別子コードのためのクレジット: How to check if JavaScript object is JSON

1

Object.keys()は、指定されたオブジェクトの列挙可能なプロパティを返します。 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

上記のオブジェクトにObject.keys(obj.attributes)を設定すると、["blue", "red", "green"]が返されます。フィルタを適用して、オブジェクトの値がtrueの属性のみを返すことができます。

var obj = { 
 
    "attributes": { 
 
     "blue":true, 
 
     "red":false, 
 
     "green":true 
 
    } 
 
} 
 
console.log(Object.keys(obj.attributes).filter(function(attr) { return obj.attributes[attr] }))

+1

これは素晴らしいことですが、値は真で赤はないので青と緑だけを返す必要があります – Midimistro

+0

'Object.keys(obj.attributes).filter(function(attr){return obj.attributes [attr]} ) 'キーの値が真であるキーを返す – Samuel

+0

" websafe "を返す代わりに、" webattrib "を返す以外は80%で動作します。これは私が望んでいないものです。 – Midimistro

関連する問題