JSON与递归算法

        最近在做一个有关Mongo GUI的Demo,遇到这样的一个需求:

        把一JSON字符串,如{id:1,name:{first:Zhang,last:Shell}}

        转换为如下的输出格式:

{

     id:1

     name:

    {

         first:Zhang

         last:Shell

    }

}

        另外,内嵌对象的级别是无限嵌套的,即内嵌对象里可能再内嵌有其他的对象。还有一点,也正是Mongo的Free-Schema模式,前一条记录可能与后一条记录的关系很弱。

        该如何呢?其实也很简单,就是用递归的算法。毕竟这场景太“递归Style”了!

        附上JS写的递归算法

     if(value.indexOf("{") == 0){
        

	        var kvs = JSON.parse(value);

         var str = "<br/><table  id='contt'><tr><td>{</td></tr>";
        
         for(var k in kvs){
             str += cycleIt(k,kvs[k],"","");
         }
        
         str += "<tr><td>}</td></tr></table>";

         (document.getElementsByName("jsons")[i]).innerHTML = str;
     }
     function cycleIt(k, objs, td, prefix){
         var str = "";
         td += "<td></td>";
         prefix += k+".";
         if(objs instanceof Object){
             str += "<tr>"+td+"<td><span>"+k+" :</span></td></tr>"+"<tr>"+td+"<td>{</td></tr>";
             for(var each in objs){
                str += cycleIt(each, objs[each], td, prefix);
             }
             str += "<tr>"+td+"<td>}</td></tr>";
         }
         else{
             str += "<tr>"+td+"<td><span>"+k+" : </span></td><td>"+objs+"</td></tr>";
         }
         return str;
      }

        JS天生支持JSON,JSON.parse(value)即可将JSON字符串转化为JSON对象。for循环中的var k,即为JSON中当前迭代的key,而kvs[k]即为当前迭代key的value。

递归算法真正的解决了这个问题,并为后续的一些其他需求提供了方便性。

        如,我需要在点击某个字段名(Key)的时候,该字段的值(Value)(包括其内嵌的,或者再内嵌的对象属性值)的backgroundColor换成某个颜色这样。是相当的简单且方便的。这里,只需把prefix设置为标签的属性名即可。

        ……

       

      

    原文作者:递归算法
    原文地址: https://blog.csdn.net/firstests/article/details/8235359
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞