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设置为标签的属性名即可。

        ……

       

      


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值