说我有以下JSON文件:
{"attributes":
{
"blue":true,
"red":false,
"green":true,
"webAtt":
{
"webColor": "#EF5689",
"webSafe":true
}
}
}
但我还要说除了"属性"我不知道任何JSON节点。我如何找到哪些属性是真的?这甚至可能吗?如果不是,则必须为"属性"?
的每个子节点进行硬编码如果可能,我希望在JavaScript中完成此操作。
编辑:有一个原因,为什么webAtt在那里,因为我想得到"网络安全"而不是" webAtt"什么时候扫地。答案 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