json转成java对象
avro生成的代码里,String是CharSequence,不能通过Gson反序列化,于是有了下面的代码,ParseArray里还不完善:
1 static <T> List<T> parseArray(JSONArray arrary,Class<?> cls) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException, InstantiationException, ClassNotFoundException{2 List<T> result = new ArrayList<T>();
3 String className = cls.getName();
4 for(int i=0;i<arrary.length();i++){
5 if(className.contains("java.lang")){
6 if(className.equals("java.lang.CharSequence") ||
7 className.equals("java.lang.String")) {
8 result.add((T) arrary.getString(i));
9 }else if(className.equals("java.lang.Double")) {
10 result.add((T) ((Double)arrary.getDouble(i)));
11 } else if(className.equals("java.lang.Integer")) {
12 result.add((T) ((Integer)arrary.getInt(i)));
13 } else if(className.equals("java.lang.Boolean")) {
14 result.add((T) ((Boolean)arrary.getBoolean(i)));
15 }
16 }else{
17 // 解析对象
18 result.add((T)json2Bean(arrary.getJSONObject(i),cls));
19 }
20 }
21 return result;
22 }
23
24 public static <T> T json2Bean(JSONObject jsonObject, Class<?> cls) throws IllegalAccessException,
25 InvocationTargetException, NoSuchMethodException, InstantiationException, ClassNotFoundException {
26 // if (item == null) {
27 // return null;
28 // }
29 T item = (T) cls.newInstance();
30 Field[] fields = cls.getDeclaredFields();
31 for (Field field : fields) {
32 String varName = field.getName();
33 if (jsonObject.has(varName)) {
34 Object value = jsonObject.get(varName);
35
36 Class<?> currentClass = field.getType();
37 if(currentClass.equals(List.class)){
38 JSONArray array = (JSONArray)value;
39 String subClassName = field.getGenericType().toString().replace("java.util.List<", "");
40 subClassName = subClassName.substring(0,subClassName.length()-1);
41 // System.out.println(subClassName);
42 Class<?> clasz = Class.forName(subClassName);
43 // System.out.println(z.getClass());
44 BeanUtils.setProperty(item, varName, parseArray(array ,clasz));
45
46 }else{
47 if(value instanceof JSONObject){
48 BeanUtils.setProperty(item, varName, json2Bean((JSONObject)value,currentClass));
49 }else{
50 if(value instanceof JSONNull){
51 value = null;
52 }
53 BeanUtils.setProperty(item, varName, value);
54 }
55 }
56 }else{
57 // 设置默认值
58 //BeanUtils.setProperty(item, varName, null);
59 }
60 }
61 return item;
62 }
以上是 json转成java对象 的全部内容, 来源链接: utcz.com/z/390153.html