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

有点时候我们需要解析未知的json。或者说是动态的json。那么我们并不知道key具体是多少,或者说key不是固定的。这时候就需要解析动态key的方法。

这个方法是我在实现解析前台传入的json时所需要的。因为每个界面的前台传的是json是不固定的。如果真对每一个页面所传的数据都单独进行一次解析,那么太麻烦了。所以需要一个通用的解析方式。将其解析到map中。那么只需要调用该方法,就能获取到前台所传json对于的map。

在网上收了一会,找不到我想要的方法,即不和我心意,代码又不给全。所以自己测试了一个简单的代码。我是使用递归实现的,代码简单。就不一一讲解了,如果还有不清楚的,请留言。

package jsonTest;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import net.sf.json.JSONObject;

public class JsonTest {
    public static void main(String[] args) {
        //测试字符串
        String test = "{a:1,b:2,c:3,d:{q:4,w:5,e:6,y:{o:7,p:8}}}";
        Map res = new HashMap();
        //递归遍历解析方法
        iteraJson(test,res);
        //解析得到最终map后,遍历该map输出值
        Set keySet = res.keySet();
        Iterator iterator = keySet.iterator();
        while(iterator.hasNext()){
            String key = iterator.next().toString();
            Object val = res.get(key);
            System.out.println(key+":"+val.toString());
        }
    }
    //递归遍历解析方法
    public static boolean iteraJson(String String,Map res){
      //因为json串中不一定有逗号,但是一定有:号,所以这里判断没有则已经value了
        if(String.toString().indexOf(":") == -1){
            return true;
        }
        JSONObject fromObject = JSONObject.fromObject(String);
        Iterator keys = fromObject.keys();
        while(keys.hasNext()){
            String key = keys.next().toString();
            Object value = fromObject.get(key);
            if(iteraJson(value.toString(),res)){
                res.put(key, value);
            }
        }
        return false;
    }
}

猜你喜欢

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