自定义test之java json字符串转为java对象
来源:互联网 发布:知乎@公众号提问 编辑:程序博客网 时间:2024/06/06 15:04
最近作者在上一篇java json字符串转map或list(http://blog.csdn.net/zqy1992/article/details/70189997)的基础上实现了把json字符串转为普通java对象的简单功能,还望大家批评指正。
private static <T> T parseObject(String input,Class<T> clazz) throws Exception{
if(input == null){
return null;
}
Map<String,Object> map = (Map<String, Object>) JsonPrase2Test.getObject(input);
return parseObjectImpl(map,clazz);
}
private static <T> T parseObjectImpl(Map<String,Object> map,Class<T> clazz) throws Exception{
if(map == null || map.size() <= 0){
return null;
}
Field[] fields = clazz.getDeclaredFields();
T t = (T) Class.forName(clazz.getName()).newInstance();
for(Field field : fields){
try{
PropertyDescriptor propertyDescriptor = new PropertyDescriptor(field.getName(), clazz);
Method setMechod = propertyDescriptor.getWriteMethod();
if(handlePrimitiveClass(field.getType(),setMechod,t,map.get(field.getName()))){
}else if(field.getType().isAssignableFrom(List.class)){
List objectlist = new ArrayList();
List valueList = (List) map.get(field.getName());
Type type = field.getGenericType();//得到其generic类型
if(type instanceof ParameterizedType){//如果是泛型
ParameterizedType parameterizedType = (ParameterizedType) type;//暂时只处理泛型是普通objectl类型(不处理泛型是list类型)
Class genericClass = (Class) parameterizedType.getActualTypeArguments()[0];
for(Object value:valueList){
objectlist.add(parseObjectImpl((Map<String, Object>) value, genericClass));
}else{
objectlist = valueList ;
}
setMechod.invoke(t,objectlist);
}
}else{//普通对象Object
setMechod.invoke(t,parseObjectImpl((Map<String, Object>) map.get(field.getName()),field.getType()));
}
}catch (Exception e){
System.out.println("处理属性"+ field.getName()+" 异常! exception="+e.getClass());
}
}
return t;
}
private static boolean handlePrimitiveClass(Class clazz,Method setMethod,Object obj,Object value) throws Exception {
try {
if(value == null){
return true;
}
String str = value.toString();
if (clazz.isAssignableFrom(Integer.class) || clazz.isAssignableFrom(int.class)) {
setMethod.invoke(obj, Integer.valueOf(str));
} else if (clazz.isAssignableFrom(Double.class) || clazz.isAssignableFrom(double.class)) {
setMethod.invoke(obj, Double.valueOf(str));
} else if (clazz.isAssignableFrom(Float.class) || clazz.isAssignableFrom(Float.class)) {
setMethod.invoke(obj, Float.valueOf(str));
} else if (clazz.isAssignableFrom(Long.class) || clazz.isAssignableFrom(Long.class)) {
setMethod.invoke(obj, Long.valueOf(str));
} else if (clazz.isAssignableFrom(Short.class) || clazz.isAssignableFrom(Short.class)) {
setMethod.invoke(obj,Short.valueOf(str));
} else if (clazz.isAssignableFrom(Character.class) || clazz.isAssignableFrom(Character.class)) {
setMethod.invoke(obj,str);
} else if (clazz.isAssignableFrom(String.class) || clazz.isAssignableFrom(String.class)) {
setMethod.invoke(obj, str);
}else if (clazz.isAssignableFrom(Map.class)) {
setMethod.invoke(obj, value);
}else {
return false;
}
return true;
}catch (Exception e){
throw new Exception();
}
}
代码首先把json格式的字符串(这里默认是普通对象类型)转为map,根据反射获取要转为java对象的属性列表,根据属性名字在map查找然后把结果直接赋值。
0 0
- 自定义test之java json字符串转为java对象
- java将对象转为json字符串
- 自定义test之java json字符串转map或list
- json 转为java对象
- Java对象转为json
- json字符串转为java类
- 任意java对象转为json
- Java对象转为Json串
- JSON字符串转为对象
- JSON转为Java对象时报的错
- 自定义test之java两个对象之间值的异同
- 自定义test之java对象属性拷贝简单实现
- JS JSON对象转为字符串
- C# json字符串转为对象
- 后台对象转为json字符串
- iOS-json字符串转为对象
- 各种对象转为json字符串
- json数据解析,json数据转为java对象
- (干货)自定义 type="range" type="radio" select的样式
- Centos 6.x Hadoop集群环境搭建
- android 播放视频常见问题
- L2-022. 重排链表
- Bootstrap框架,在使用栅格布局的时候,在父标签中添加row类,发现引起网页出现横向滚动条的问题
- 自定义test之java json字符串转为java对象
- 使用ubuntu17.04编译Android 6.0源代码
- 写在最初
- hadoop2.7.3的安装
- 如何使用mule message
- 去除字符串中的空格 C语言实现
- POJ 1182 食物链 -- 解题报告
- MLManager 简单的app管理器
- Windows7操作系统下使用Eclipse来搭建hadoop开发环境