2014-12-23 61 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啓發。