添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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

yarn add deep-parse-json const { deepParseJson } = require('deep-parse-json') const stringified = '{"personList":"[{\\"name\\":\\"siba\\"},{\\"name\\":\\"bhaskar\\"}]"}' console.log(deepParseJson(stringified)) // { personList: [ { name: 'siba' }, { name: 'bhaskar' } ] } 解析不知道层数的JSON 通过递归的方式进行解析,将嵌套的JSON数据解析为只有一层的大JSON 注意:数据里面不能有重复的 数据,或者可以再else里面做一个判断,如果json里面有了,则做出对应的处理,手动改key或者抛弃。 // data 需要解析的数据, result解析后数据放入该json里面 public JSONObject analysisJSON(JSONObject data,JSONObject result){ Set<String>parentKey = data.k <!DOCTYPE html><html> <head> <meta charset="utf-8"> <title></title> <link rel="stylesheet" href="../Public/css/bootstrap.css"/> <script src="../P... 平时做项目时,我们经常会遇到需要遍历json对象的情况,如果是知道层级的话还好搞一点,如果层级是没办法固定的话就不能用一般的遍历方法了,然后我今天使用到了递归,考虑到以后也可能会经常用到所以记录一下,使用后感觉用好了的话对各种动态操作还是很有帮助的; 有的时候我们需要解析未知json。或者说是动态json。那么我们并不知道key具体是多少,或者说key不是固定的。这时候就需要解析动态key方法。 这个方法是我在实现解析前台传入的json时所需要的。因为每个界面的前台传的是json是不固定的。如果真对每一个页面所传的数据都单独进行一次解析,那么太麻烦了。所以需要一个通用的解析方式。将其解析到map。那么只需要调用该方法,就能获取到前台所... /*** JSONObject解析方法(可以解析任意层json,采用递归解析方法)* @param objJson* @param menu 父菜单实体类* @param list List集合* @return*/@SuppressWarnings("rawtypes")public static List analysisJson(Object objJson,Menu menu,List ... 点击上方蓝字关注我["obj1":{"attr": "xxx","childs" : ["obj2":{"attr":"xxx","childs" : null}, "obj3" : { "attr" : "xxx", "childs" : null ... //解析策略,有可能是解析json字符串,有可能为数据的图片地址,email等package cc.util.regex;public enum RegexPolicy {Json("Json"),Image("ImageFromHtml");private String value;RegexPolicy (String value) {this.value = value;}@Overrid... 一、建立递归树的实体类public class Tree implements Serializable {/****/private static final long serialVersionUID = 2944880335559089140L;private String key;//节点keyprivate String title;//节点名称private String parent...