我想要遍歷 JSON 對象樹中,但為何找不到任何一間圖書館。這似乎是不難,但感覺就像重新發明輪子。
在 XML 中有很多教程演示如何遍歷 XML DOM 樹:(
解決方法 1:
如果你認為 jQuery 是什么樣的
overkill
這種原始的任務,你可以這樣做:
1 //your object 2 var o = { 3 foo:"bar", 4 arr:[1,2,3], 5 subo: { 6 foo2:"bar2" 7 } 8 }; 9 10 //called with every property and it's value 11 function process(key,value) { 12 log(key + " : "+value); 13 } 14 15 function traverse(o,func) { 16 for (i in o) { 17 func.apply(this,[i,o[i]]); 18 if (typeof(o[i])=="object") { 19 //going on step down in the object tree!! 20 traverse(o[i],func); 21 } 22 } 23 24 //that's all... no magic, no bloated framework 25 traverse(o,process);
解決方法 2:
JSON 對象是簡單 Javascript 對象。這實際上是 JSON 的主張: JavaScript 對象表示法。所以你會遍歷 JSON 對象,但是你會選擇"穿越"Javascript 對象一般。
Jquery,我會像做
$.each(myJsonObj, function(key,val){
// do something with key and val
});
您始終可以編寫一個函數以遞歸方式下降到的對象:
function traverse(jsonObj) {
if( typeof jsonObj == "object" ) {
$.each(jsonObj, function(k,v) {
// k is either an array index or object key
traverse(v);
}
}
else {
// jsonOb is a number or string
}
}
這應該是一個好的起點。我強烈建議使用 jQuery 這樣的事情,因為他們的實用程序,如在每個循環使編寫這樣的代碼要容易得多。
解決方法 3:
那里是遍歷 JSON 數據支持許多不同的使用情況下的 javascript 的新圖書館。
http://github.com/substack/js-traverse
它適用於所有種類的 JavaScript 對象。它甚至會檢測周期。
它也提供了每個節點的路徑。
解決方法 4:
取決於你想做什么。下面是一個示例的遍歷 JavaScript 對象樹、 打印鍵和值的它:
function js_traverse(o) {
var type = typeof o
if (type == "object") {
for (var key in o) {
print("key: ", key)
js_traverse(o[key])
}
} else {
print(o)
}
}
js> foobar = {foo: "bar", baz: "quux", zot: [1, 2, 3, {some: "hash"}]}
[object Object]
js> js_traverse(foobar)
key: foo
bar
key: baz
quux
key: zot
key: 0
1
key: 1
2
key: 2
3
key: 3
key: some
hash
解決方法 5:
有缺少} 在上面的導線函數。更正后的版本:
函數 traverse(o,func) {為 (i 在澳) {func.apply(this,[i,o[i]]) ;
如果 (typeof(o[i])=="object") {//going 在對象樹中向下一步 !!traverse(o[i],func) ;} } }
