通过GSON 解析Json数据,但是不创建JAVA Bean的方式,获取对应的值

来源:互联网 发布:初学者学英语软件 编辑:程序博客网 时间:2024/05/22 20:29

问题:一般我们会把对应的json数据解析后映射到对应的Java Bean上,但是现在项目底层变化,不能创建Java Bean.怎么通过字符串的方式获取到对应的Value?
解决思路: 首先,应该把Json转换为Map嵌套Map的格式,如果遇到数组,Gson会帮我们自动的转化成ArrayList。这个很关键。然后获取对应集合里面的元素。这个元素是个Map就继续获取。直到最后成为String.

package demo;import java.util.HashMap;import java.util.List;import java.util.Map;import com.google.gson.Gson;public class GsonTest {    public static void main(String[] args) {        String jsonStr  = "{\"lendperson\":\"李四\",\"user\":{\"username\":\"kobe\",\"password\":\"1111\"},\"lendcompany\":\"有限公司\",\"checkperson\":\"李四\",\"lenddate\":\"2010-07-19T00:00:00\",\"lendcounts\":4,\"passports\":[{\"passportid\":\"d\",\"name\":\"李豫川\",\"passporttype\":\"K\"},{\"passportid\":\"K9051\",\"name\":\"李平\",\"passporttype\":\"K\"},{\"passportid\":\"K905199\",\"name\":\"贺明\",\"passporttype\":\"K\"}]}";        Gson gson = new Gson();        Object obj = gson.fromJson(jsonStr,HashMap.class);        String value = "this.passports[2].name";//      String value = "this.user.password";        String[] strs = value.split("\\.");        for(int i = 1; i < strs.length; i++) {            if(strs[i].contains("[")) {                String index = strs[i].substring(strs[i].indexOf("[")+1, strs[i].indexOf("]"));                String key = strs[i].substring(0, strs[i].indexOf("["));//              obj = ((List)((Map)obj).get(key)).get(Integer.valueOf(index));                Object objList = ((Map)obj).get(key); //获取到的是一个List type,然后强转成List                if(objList instanceof List) {                    System.out.println(objList);                }                obj = ((List)objList).get(Integer.valueOf(index));                System.out.println(obj);            } else {                obj = ((Map)obj).get(strs[i]);//如果是一个map,会继续获取,直到获取到对应的值。                if(obj instanceof Map) {                    System.out.println("11"+obj);                }            }        }        System.out.println(obj);    }}
0 0
原创粉丝点击