json转成java对象
时间:2022-05-03
本文章向大家介绍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 }
- 第三章 正则表达式括号的作用
- KMP算法
- 【强势回归,Android开发疑难杂症】Process 和 ProcessBuilder 区别
- 史上最全webview详解
- SpringBoot快速入门
- 效果类似于label从下往上滑(采用uiTableView实现)
- android 热修补之andfix实践
- ios 设置label的高度随着内容的变化而变化
- Android字体大小怎么自适应不同分辨率?
- iOS textfield实现一行的数字限制,超出进行弹框
- android https安全连接
- 第二章 正则表达式位置匹配攻略
- 从网络上下载省份城市名称并存入文件然后进行读取省份城市
- android 应用模式之mvp
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法