json转成java对象
avro生成的代码里,String是CharSequence,不能通过Gson反序列化,于是有了下面的代码,ParseArray里还不完善:
- static <T> List<T> parseArray(JSONArray arrary,Class<?> cls) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException, InstantiationException, ClassNotFoundException{
- List<T> result = new ArrayList<T>();
- String className = cls.getName();
- for(int i=0;i<arrary.length();i++){
- if(className.contains("java.lang")){
- if(className.equals("java.lang.CharSequence") ||
- className.equals("java.lang.String")) {
- result.add((T) arrary.getString(i));
- }else if(className.equals("java.lang.Double")) {
- result.add((T) ((Double)arrary.getDouble(i)));
- } else if(className.equals("java.lang.Integer")) {
- result.add((T) ((Integer)arrary.getInt(i)));
- } else if(className.equals("java.lang.Boolean")) {
- result.add((T) ((Boolean)arrary.getBoolean(i)));
- }
- }else{
- // 解析对象
- result.add((T)json2Bean(arrary.getJSONObject(i),cls));
- }
- }
- return result;
- }
- public static <T> T json2Bean(JSONObject jsonObject, Class<?> cls) throws IllegalAccessException,
- InvocationTargetException, NoSuchMethodException, InstantiationException, ClassNotFoundException {
- // if (item == null) {
- // return null;
- // }
- T item = (T) cls.newInstance();
- Field[] fields = cls.getDeclaredFields();
- for (Field field : fields) {
- String varName = field.getName();
- if (jsonObject.has(varName)) {
- Object value = jsonObject.get(varName);
- Class<?> currentClass = field.getType();
- if(currentClass.equals(List.class)){
- JSONArray array = (JSONArray)value;
- String subClassName = field.getGenericType().toString().replace("java.util.List<", "");
- subClassName = subClassName.substring(0,subClassName.length()-1);
- // System.out.println(subClassName);
- Class<?> clasz = Class.forName(subClassName);
- // System.out.println(z.getClass());
- BeanUtils.setProperty(item, varName, parseArray(array ,clasz));
- }else{
- if(value instanceof JSONObject){
- BeanUtils.setProperty(item, varName, json2Bean((JSONObject)value,currentClass));
- }else{
- if(value instanceof JSONNull){
- value = null;
- }
- BeanUtils.setProperty(item, varName, value);
- }
- }
- }else{
- // 设置默认值
- //BeanUtils.setProperty(item, varName, null);
- }
- }
- return item;
- }
json转成java对象的更多相关文章
- 利用JAVA反射机制将JSON数据转换成JAVA对象
net.sf.json.JSONObject为我们提供了toBean方法用来转换为JAVA对象, 功能更为强大, 这里借鉴采用JDK的反射机制, 作为简单的辅助工具使用, 有些数据类型需要进行转 ...
- json字符串转json对象,json对象转换成java对象
@RequestMapping(value = "updateInvestorApplyAccountNo", method = RequestMethod.POST) @Resp ...
- json 串转成 java 对象再拼接成前台 html 元素
获取商品参数 json 串,转成 java 对象,再拼接成前台 html 的Service方法 @Override public String getItemParam(Long itemId) { ...
- json字符串转成 json对象 json对象转换成java对象
import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject; 依赖包 <dependency> ...
- 将String类型的json字符串转换成java对象
1,import com.fasterxml.jackson.databind.ObjectMapper; ObjectMapper mapper = new ObjectMapper(); Mycl ...
- JSON字符串与java对象的转换
所需的jar包: 1.commons-lang.jar 2.commons-beanutils.jar 3.commons-collections.jar 4.commons-logging.jar ...
- JSON 字符串 与 java 对象的转换
jsonLib 经典文章:http://json-lib.sourceforge.net/xref-test/net/sf/json/TestJSONObject.html // 引入相应的包 //j ...
- Json字符串转换为java对象的各种实现方法【json_lib框架、Gson、org.json】
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://mengzhengbin520.blog.51cto.com/7590564/12 ...
- Java:Json与其他Java对象集合的转换
一.引入的jar包 json-lib-2.4-jdk15.jar 二.Json字符串转换为其他对象 1.对象==>json字符串 2.list和Map集合==>json字符串 3.Map集 ...
随机推荐
- 转--python之正则入门
原文地址 1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法 ...
- VUE2.0 饿了吗视频学习笔记(五):父子对象传递、显示图片
一.父子组件之间对象传递 1.app.Vue中的v-header 中加入 v-bind:seller="seller" template> <div id=" ...
- luogu 2294 狡猾的商人 带权并查集
此题做法多啊 带权并查集,区间dp,前缀和,差分约束 1.自己写的前缀和, 11 #include<bits/stdc++.h> #define rep(i,x,y) for(regist ...
- luogu P3760 [TJOI2017]异或和
传送门 对于每个二进制位考虑有多少区间和这一位上为1 从前往后扫每个前缀和,如果当前这个前缀和某一个二进制位上为1,因为区间和由这个前缀和减去前面的前缀和得来,如果减去了这一位为0的前缀和,那么 减去 ...
- 【SVN】svn使用方法
下载安装TortoiseSVN 下载地方 安装成功后 TortoiseSVN清除凭证 右击空白处-TortoiseSVN-Settings打开Settings窗口后做如下操作: svn在idea中的使 ...
- Database学习 - mysql 数据库 外键
外键 外键约束子表的含义:如果在父表中赵达不到候选键,则不允许在子表上进行insert/update 外键预约对父表的含义:在父表上进行update/delete以更新或删除子表中有一条或多条对应匹配 ...
- Python 入门基础17 --加密、表格、xml模块
今日内容: 1.hashlib模块:加密 2.hmac模块:加密 3.configparser模块:操作配置文件 4.subprocess模块:操作shell命令 5.xlrd模块:excel 6.x ...
- SQL Server 备份还原
SQL Server支持三种备份方式 完全备份: 差异备份 事务日志备份 一般备份方式为,完全备份/每周,差异备份/每天,事务日志备份/按分钟计,这样可确保备份的高效性和可恢复性. 1. 完全备份 备 ...
- 2018-2019-2 网络对抗技术 20165227 Exp2 后门原理与实践
2018-2019-2 网络对抗技术 20165227 Exp2 后门原理与实践 (1)例举你能想到的一个后门进入到你系统中的可能方式? 接收邮件的方式 (2)例举你知道的后门如何启动起来(win及l ...
- JS直接if参数的用法
经常在JS中见一些代码直接if(参数),然后参数调用的时候是将元素自己传下去.例如下面代码: <body> <input type="text" name=&qu ...