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

  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. GET_WHEEL_DELTA_WPARAM宏在C#

    1.高位字,署名: ((short)(wParam>>16)) 2. 为了获得最大的清晰,我会定义一组这样的函数: internal static class NativeMethods ...

  2. Java之Jacob调用COM接口DLL-----------------------------------dm。dll

    用Java控制windows了,嗯,低层次按键模拟,可控制游戏,内存也不在话下. 一.环境介绍 1.myeclipse8.5 2.著名按键插件dm.dll  32bit.此插件实现COM接口,百度百科 ...

  3. IPv4套接字地址结构

    一.IPv4套接字地址结构(POSIX定义) (1)长度字段sin_len是为增加对OSI协议的支持而随4.3BSD-Reno添加的:并不是所有的厂家都支持套接字地址结构的长度字段,而且POSIX规范 ...

  4. 淘淘商城之spring web mvc架构

    一.什么是springmvc springmvc是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合: springmvc是一个基于mvc的web框架   二.mv ...

  5. android AsyncHttpClient使用

    1.www.github.com下载jar包 loopj/android-async-http 将下载好的文件导入项目中 2.main.xml <?xml version="1.0&q ...

  6. 第16月第27天 pip install virtualenv ipython sip brew search

    1. pip install virtualenv virtualenv testvir cd testvir cd Scripts activate pip https://zhuanlan.zhi ...

  7. MacOs -bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory

    1解决iterm远程登录主机报错 -bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or ...

  8. 同步sync 异步async

    线程中 同步任务是串行队列,也就是按顺序执行. 同步任务:不会开辟新的线程,它是在当前线程执行的. dispatch 调度   GCD里面的函数都是以dispatch开头的. 同步任务  步骤: 1. ...

  9. SpringMVC集成MongoDb

    (1)pom添加相关依赖 <dependency> <groupId>org.springframework.data</groupId> <artifact ...

  10. 深入理解CMA【转】

    转自:https://www.csdn.net/article/a/2016-07-07/15839383 摘要:连续内存分配(简称CMA) 是一种用于申请大量的,并且物理上连续的内存块的方法,在LW ...