我想要遍历 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 value11 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 framework25 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: foobarkey: bazquuxkey: zotkey: 01key: 12key: 23key: 3key: somehash
解决方法 5:
有缺少} 在上面的导线函数。更正后的版本:
函数 traverse(o,func) {为 (i 在澳) {func.apply(this,[i,o[i]]) ;
如果 (typeof(o[i])=="object") {//going 在对象树中向下一步 !!traverse(o[i],func) ;} } }