2014-12-23 28 views
0

我有一个JSON对象,它有几个嵌套的级别。如何将字符串转换为JSONPath

我给出了一个指向特定对象位置的字符串。

举例来说,如果我的JSON对象看起来像:

countries: [ 
    canada: { 
      capital: "ottawa", 
      territories: [ 
       yukon: { 
        capital: "yellowknife", 
        ... 
       } 
       ... 
      ] 
      ... 
    } 

,我给出的字符串

"countries.canada.territories.yukon" 

我想为育空的对象。

我该怎么做?

回答

0

,我想出了一个方法来得到它的工作。它看起来并不“正确”,但它仍然是一个答案。 (我将标记为接受任何比这更好的答案)

for (var key in currentObject){ 
     delete currentObject[key]; 
} 

这清除了育空对象。

更新小提琴:http://jsfiddle.net/ay1wpr5L/3/

+0

这个答案很糟糕... –

0

可能不是最有效的方法,但它的工作原理。

var n= {JSON}; 
var c="countries.canada.territories.yukon".split('.'); 
var p=n; 
for(var i=0;i<c.length;i++){ 
    p=p[c[i]]; 
} 
console.log(p);// p is your Yukon Element 

,如果你想编辑的元素使用eval函数:

var myJSON= {JSON}; 
var c="countries.canada.territories.yukon"; 
c='myJSON["'+c+'"]'; 
c.replace(/\./g,'"]["'); 
eval(c+'={COOL_JSON_CODE}') 
console.log(myJSON);// the Yukon element has cool new json code in it now 
+0

唯一的问题是它给我的对象的价值,但不是参考。我无法用'p'更新对象 – CodyBugstein

+0

我更新了我的答案 –

0

我用这个,

function jsonPathToValue(jsonData, path) { 
    if (!(jsonData instanceof Object) || typeof (path) === "undefined") { 
     throw "InvalidArgumentException(jsonData:" + jsonData + ", path:" + path); 
    } 
    path = path.replace(/\[(\w+)\]/g, '.$1'); // convert indexes to properties 
    path = path.replace(/^\./, ''); // strip a leading dot 
    var pathArray = path.split('.'); 
    for (var i = 0, n = pathArray.length; i < n; ++i) { 
     var key = pathArray[i]; 
     if (key in jsonData) { 
      if (jsonData[key] !== null) { 
       jsonData = jsonData[key]; 
      } else { 
       return null; 
      } 
     } else { 
      return key; 
     } 
    } 
    return jsonData; 
} 

测试,

json = {"a1":{"a2":{"a3":"value"}}}; 
console.log(jsonPathToValue(json, "a1.a2.a3")); //=> shows: value 

here启发。