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集 ...
随机推荐
- hive vs hbase
HIVE和HBASE区别 两者分别是什么? Apache Hive是一个构建在Hadoop基础设施之上的数据仓库.通过Hive可以使用HQL语言查询存放在HDFS上的数据.HQL是一种类SQL语言,这 ...
- linux僵尸进程产生的原因以及如何避免产生僵尸进程
给进程设置僵尸状态的目的是维护子进程的信息,以便父进程在以后某个时间获取.这些信息包括子进程的进程ID.终止状态以及资源利用信息(CPU时间,内存使用量等等).如果一个进程终止,而该进程有子进程处于僵 ...
- 在Eclipse中利用maven整合搭建ssm框架
首先说明用到的框架: spring + springMVC + mybatis 构建工具:maven 开发工具:eclipse 开发环境:win10 java版本:jdk1.8 ...
- Hibernate or 的用法
转自baidu estrictions.or(Restrictions.like(),Restrictions.or(Restrictions.like,........))里面的or可以无限加的.还 ...
- B - Finding Palindromes (字典树+manacher)
题目链接:https://cn.vjudge.net/contest/283743#problem/B 题目大意:给你n个字符串,然后问你将这位n个字符串任意两两组合,然后问你这所有的n*n种情况中, ...
- 实验一 Java开发环境的熟悉--20165221
实验报告封面 课程:Java程序设计 班级:1652班 姓名:谭笑 学号:20165221 成绩: 指导教师:娄嘉鹏 试验日期:2018.4.2 实验组次:21 预习程度:已预习 实验时间:15:35 ...
- python3爬虫一
1.环境安装: 在py3env(虚拟环境)下安装scrapy,新建项目: pip install scrapy scrapy startproject ArticleSpider cd Article ...
- camera驱动框架分析(上)【转】
转自:https://www.cnblogs.com/rongpmcu/p/7662738.html 前言 camera驱动框架涉及到的知识点比较多,特别是camera本身的接口就有很多,有些是直接连 ...
- xpath路径前可用方法测试
$x("string-length(//h3[@class='t'])") 8 $x("string(//h3[@class='t'])") "XPa ...
- c# webbrowser控件内核版本强制修改
int BrowserVer, RegVal; // get the installed IE version using (WebBrowser Wb = new WebBrowser()) Bro ...