是否有可能不知道密钥的名称
说我有以下的JSON文件返回基于价值JSON键名:是否有可能不知道密钥的名称
{"attributes":
{
"blue":true,
"red":false,
"green":true,
"webAtt":
{
"webColor": "#EF5689",
"webSafe":true
}
}
}
但让也说我不知道任何JSON节点除“属性”。我将如何去寻找哪些属性是真的?这甚至有可能吗?如果没有,是否必须对每个“属性”的子节点进行硬编码?
如果可能,我希望在JavaScript中完成此操作。
编辑:有一个原因,为什么webAtt在那里,因为我想在扫地时得到“websafe”,而不是“webAtt”。
您可以循环使用做到这一点。
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
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] }))
这很好,所有的,但我只需要返回蓝色和绿色,因为它们的值是真实的,红色不是 – Midimistro
'Object.keys(obj.attributes).filter(function(attr){return obj.attributes [attr]} )'将返回键值为真的键 – Samuel
这工作80%,除了不返回“websafe”,它返回“webattrib”,这不是我想要的。 – Midimistro
你JSON是无效的; '绿色'中的'{'会引发语法错误。我假设你只是想让对象变成绿色? –
是的...我的坏...这只是我在飞行中制作的一个JSON示例,不是我现在需要的JavaScript ... – Midimistro
请参阅已更新的JSON以获取正确的语法。 – Midimistro