问题:一般我们会把对应的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);
}
}