2014-09-11 72 views
0

如何在JSON对象中检查输入路径是否存在?在对象内部查找JSON路径

var obj = { 
    "schemaOne": { 
    "name": "abc", 
    "Path": "i.abc", 
    "count": 5347, 
    "subFolders": [ 

    ] 
    }, 
    "schemaTwo": { 
    "name": "cde", 
    "Path": "i.cde", 
    "count": 0, 
    "subFolders": [ 
     { 
     "name": "efg", 
     "Path": "", 
     "count": 0, 
     "subFolders": [ 

     ] 
     }, 
     { 
     "name": "hij", 
     "Path": "i.hij", 
     "count": 1, 
     "subFolders": [ 

     ] 
     } 
    ] 
    } 
} 

var inputpath = "obj.count"; 

经过几次研究,我发现下面的代码。在此代码中,用户已知o.Path。但我想修改代码,以便动态检查obj.count是否存在于JSON对象中?

function upd(o, path, count) { 
    if (o.Path == path) { 
    o.count = count; 
    } else { 
    var arr; 
    if (Array.isArray(o)) arr = o; 
    else if (o.subFolders) arr = o.subFolders; 
    else return; 
    for(var j=0; j < arr.length; j++) { 
     upd(arr[j], path, count); 
    } 
    } 
} 
+2

JSON在哪里? – Teemu 2014-09-11 10:48:37

+0

@Teemu obj变量包含JSON对象 – user87267867 2014-09-11 10:49:55

+3

不可以,'obj'是一个JavaScript对象,它与数据交换格式无关。 – Teemu 2014-09-11 10:50:42

回答

0

你的问题不是很清楚,既不是用例。正如有人告诉你的,obj是一个JavaScript对象,而不是JSON。

如果我理解正确,你想检查一个路径,espressed为字符串(如“obj.count”)是否存在于该对象中。

非常快,但不安全溶液(eval是邪恶的,应在任何情况下几乎避免的)可能是:

if(eval(inputpath)){ 
    //... do something 
} 

在可替代的,我建议你写一个获取对象的功能和一个字符串(路径)作为参数,解析字符串路径并检查对象是否包含这样的路径。

从这里开始:Accessing nested JavaScript objects with string key

+0

我试过的代码,但对于未知的数组索引,它是抛出未定义[http://jsfiddle.net/user87267867/uLL0a9u0/] – user87267867 2014-09-11 11:22:55

+0

好吧,如果索引它是未知的,这不是一个有效的路径,你不能用它。在你的例子中,尝试'schemaTwo.subFolders [0] .name'而不是 – 2014-09-11 12:12:03

+0

是的,这将工作 – user87267867 2014-09-11 12:15:39