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

本文介绍了一种通过递归方法解析复杂且未知结构的JSON数据的方法。该方法包括定义判断对象类型的功能函数,并通过递归遍历JSON数据的每一个层级,最终实现对所有键值对的有效解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当存在要解析未知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、效果:
这里写图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值