js递归实现动态解析json字符串未知key的方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Esc_Tab_End/article/details/80348149

当存在要解析未知key的json数据时,我们就需要一个递归方法来实现解析操作。

1、定义一个json字符串。

var data = "{name:'尼古拉斯赵四',sex:'',age:40,birth:{year:1978,month:5,day:21},test:[{'url':'www.baicu.com'},{'url':'www.tmall.com'},{'url':'www.taobao.com'}]}";

2、定义判断对象是不是json对象的函数和是不是数组的函数

    //判断obj是否为json对象  
    function isJson(obj){  
    var isjson = typeof(obj) == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length;   
    return isjson;  
    }   
    //判断是不是数组
    function isArrayFn(o) {
    return Object.prototype.toString.call(o) === '[object Array]';
  } 

3、递归函数
递归函数有三个要素:
① 一定有一种可以退出程序的情况;
② 总是在尝试将一个问题化简到更小的规模
③ 父问题与子问题不能有重叠的部分

function stack(obj){
     if(!isJson(obj)){//退出条件:当对象不是json的时候推出
        return obj;
     }
     //如果是json进行循环,取出键值对。逐渐减小问题的规模
      for(var o in obj){
        if(stack(obj[o])){//进行判断,进入子问题
            if(isArrayFn(obj[o])){//判断是不是数组
            var arr = obj[o];
            for(var i = 0;i < arr.length;i++){
              stack(arr[i]);//如果是数组,再判断数组里的数据是不是json。
            }
          }else{
            console.info(o+":"+obj[o]);
          }
        }
      }
  }

4、当文档加载时调用的递归函数函数

  window.onload = function(){
  //使用eval函数将data字符串,转换成json对象。
    stack(eval('('+data+')'));
  }

5、效果:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/Esc_Tab_End/article/details/80348149