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对象的更多相关文章

  1. 利用JAVA反射机制将JSON数据转换成JAVA对象

    net.sf.json.JSONObject为我们提供了toBean方法用来转换为JAVA对象, 功能更为强大,  这里借鉴采用JDK的反射机制, 作为简单的辅助工具使用,   有些数据类型需要进行转 ...

  2. json字符串转json对象,json对象转换成java对象

    @RequestMapping(value = "updateInvestorApplyAccountNo", method = RequestMethod.POST) @Resp ...

  3. json 串转成 java 对象再拼接成前台 html 元素

    获取商品参数 json 串,转成 java 对象,再拼接成前台 html 的Service方法 @Override public String getItemParam(Long itemId) { ...

  4. json字符串转成 json对象 json对象转换成java对象

    import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject; 依赖包 <dependency> ...

  5. 将String类型的json字符串转换成java对象

    1,import com.fasterxml.jackson.databind.ObjectMapper; ObjectMapper mapper = new ObjectMapper(); Mycl ...

  6. JSON字符串与java对象的转换

    所需的jar包: 1.commons-lang.jar 2.commons-beanutils.jar 3.commons-collections.jar 4.commons-logging.jar ...

  7. JSON 字符串 与 java 对象的转换

    jsonLib 经典文章:http://json-lib.sourceforge.net/xref-test/net/sf/json/TestJSONObject.html // 引入相应的包 //j ...

  8. Json字符串转换为java对象的各种实现方法【json_lib框架、Gson、org.json】

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://mengzhengbin520.blog.51cto.com/7590564/12 ...

  9. Java:Json与其他Java对象集合的转换

    一.引入的jar包 json-lib-2.4-jdk15.jar 二.Json字符串转换为其他对象 1.对象==>json字符串 2.list和Map集合==>json字符串 3.Map集 ...

随机推荐

  1. 转--python之正则入门

    原文地址 1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法 ...

  2. VUE2.0 饿了吗视频学习笔记(五):父子对象传递、显示图片

    一.父子组件之间对象传递 1.app.Vue中的v-header 中加入 v-bind:seller="seller" template> <div id=" ...

  3. luogu 2294 狡猾的商人 带权并查集

    此题做法多啊 带权并查集,区间dp,前缀和,差分约束 1.自己写的前缀和, 11 #include<bits/stdc++.h> #define rep(i,x,y) for(regist ...

  4. luogu P3760 [TJOI2017]异或和

    传送门 对于每个二进制位考虑有多少区间和这一位上为1 从前往后扫每个前缀和,如果当前这个前缀和某一个二进制位上为1,因为区间和由这个前缀和减去前面的前缀和得来,如果减去了这一位为0的前缀和,那么 减去 ...

  5. 【SVN】svn使用方法

    下载安装TortoiseSVN 下载地方 安装成功后 TortoiseSVN清除凭证 右击空白处-TortoiseSVN-Settings打开Settings窗口后做如下操作: svn在idea中的使 ...

  6. Database学习 - mysql 数据库 外键

    外键 外键约束子表的含义:如果在父表中赵达不到候选键,则不允许在子表上进行insert/update 外键预约对父表的含义:在父表上进行update/delete以更新或删除子表中有一条或多条对应匹配 ...

  7. Python 入门基础17 --加密、表格、xml模块

    今日内容: 1.hashlib模块:加密 2.hmac模块:加密 3.configparser模块:操作配置文件 4.subprocess模块:操作shell命令 5.xlrd模块:excel 6.x ...

  8. SQL Server 备份还原

    SQL Server支持三种备份方式 完全备份: 差异备份 事务日志备份 一般备份方式为,完全备份/每周,差异备份/每天,事务日志备份/按分钟计,这样可确保备份的高效性和可恢复性. 1. 完全备份 备 ...

  9. 2018-2019-2 网络对抗技术 20165227 Exp2 后门原理与实践

    2018-2019-2 网络对抗技术 20165227 Exp2 后门原理与实践 (1)例举你能想到的一个后门进入到你系统中的可能方式? 接收邮件的方式 (2)例举你知道的后门如何启动起来(win及l ...

  10. JS直接if参数的用法

    经常在JS中见一些代码直接if(参数),然后参数调用的时候是将元素自己传下去.例如下面代码: <body> <input type="text" name=&qu ...