是否可以在不知道密钥名称的情况下根据值返回JSON密钥名称

时间:2017-03-20 01:38:41

标签: javascript json

说我有以下JSON文件:

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

但我还要说除了"属性"我不知道任何JSON节点。我如何找到哪些属性是真的?这甚至可能吗?如果不是,则必须为"属性"?

的每个子节点进行硬编码

如果可能,我希望在JavaScript中完成此操作。

编辑:有一个原因,为什么webAtt在那里,因为我想得到"网络安全"而不是" webAtt"什么时候扫地。

2 个答案:

答案 0 :(得分: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 :(得分: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

相关问题