在对象内查找JSON路径

时间:2014-09-11 10:47:56

标签: javascript 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);
    }
  }
}

1 个答案:

答案 0 :(得分:0)

您的问题不是很明确,也不是用例。有人告诉你,obj是一个JavaScript对象,而不是JSON。

如果我理解正确,你想检查该对象中是否存在一个被视为字符串的路径(例如&#34; obj.count&#34;)。

一个非常快但不安全的解决方案(eval是邪恶的,几乎在所有情况下都应该避免)可能是:

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

另外,我建议你编写一个函数来获取一个对象和一个字符串(path)作为参数,解析字符串路径并检查对象是否包含这样的路径。

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