2017-03-20 5 views
-1

sagen, dass ich die folgende JSON-Datei:Ist es möglich, JSON Schlüsselnamen auf Wert basiert zurückzukehren, ohne den Schlüssel des Namen zu kennen

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

lässt aber auch sagen, dass ich kenne keine JSON-Knoten mit Ausnahme von „Attribute“. Wie würde ich herausfinden, welche Attribute wahr sind? Ist das überhaupt möglich? Wenn nicht, muss es für jeden Kindknoten von "Attributen" fest codiert sein?

Ich möchte dies in JavaScript wenn möglich getan.

EDIT: Es gibt einen Grund, warum WebAtt da ist und es ist, weil ich "websafe" und nicht "webAtt" bekommen will, wenn Sie fegen.

+0

Ihre JSON ist ungültig; Das '{' in 'Grün' wirft einen Syntaxfehler. Ich nehme an, Sie wollen nur das Objekt für Grün haben? –

+0

Ja ... mein Schlechter ... das ist nur ein Beispiel JSON, das ich im laufenden Betrieb gemacht habe, nicht das, wofür ich JavaScript in Wirklichkeit brauche ... – Midimistro

+0

siehe aktualisierter JSON für korrekte Syntax. – Midimistro

Antwort

1

Sie können dies für Schleife mit einem tun.

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"; 
 
} 
 
}

Kredit für JSON-Objekt-Typ Identifier Code: How to check if JavaScript object is JSON

1

Object.keys() gibt die aufzählbaren Eigenschaften des angegebenen Objekts zurück. https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

So können Sie Object.keys(obj.attributes) auf das Objekt oben tun, und es würde ["blue", "red", "green"] zurückgeben. Sie können dann einen Filter anwenden, um nur die Attribute zurückzugeben, bei denen der Wert im Objekt true ist.

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

+1

Das ist nett und alles, aber ich muss nur blau und grün zurückgeben, da ihre Werte wahr sind und red ist nicht – Midimistro

+0

'Object.keys (obj.attributes) .filter (function (attr) {return obj.attributes [attr]}) 'gibt die Schlüssel zurück, wo der Wert des Schlüssels wahr ist – Samuel

+0

Das funktioniert 80%, außer, anstatt" websafe "zurückzugeben, gibt es" webattrib "zurück, was nicht das ist, was ich will. – Midimistro

Verwandte Themen