zoukankan      html  css  js  c++  java
  • 遍历 JSON JavaScript 对象树中的所有节点

     

    我想要遍历 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) ;} } }

  • 相关阅读:
    KindEditor的使用
    python过滤文件中特殊标签
    django中orm的简单操作
    django中models联合唯一unique_together
    博客当中的文章分类以及归档
    zabbix前端添加平台脚本监控
    django重写form表单中的局部钩子函数
    input获取、失去焦点对输入内容做验证
    django admin后台的简单使用
    django中博客后台将图片上传作为用户头像
  • 原文地址:https://www.cnblogs.com/imteach/p/4088613.html
Copyright © 2011-2022 走看看