对于实体类中有list的也可以由String转换为实体类
package com.richfit.richfit;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ObjectToObject {
/**
* String , Integer ,Boolean复杂结构数据转实体类对象
* @param json
* @param type
* @return
* @throws Exception
*/
public static Object jsonToBean(Object json,Object type) throws Exception{
JSONObject jsonObject = null;
Object objectValue = null;
if (json instanceof String){
jsonObject = JSONObject.parseObject(json.toString());
}else {
jsonObject = (JSONObject)json;
}
Class clazz = (Class)type;
Constructor constructor = clazz.getDeclaredConstructor();
constructor.setAccessible(true);
Object classObject = constructor.newInstance();
Field[] fields = clazz.getDeclaredFields();
for (int i=0;i<fields.length;i++){
Field field = fields[i];
field.setAccessible(true);
if (jsonObject.containsKey(field.getName())){
objectValue = jsonObject.get(field.getName());
if ((objectValue instanceof String) || (objectValue instanceof Integer) || (objectValue instanceof Boolean)){
field.set(classObject,objectValue);
}else if (objectValue instanceof JSONArray){
Iterator<Object> iterator = ((JSONArray) objectValue).iterator();
List list = new ArrayList<>();
Type genericType = field.getGenericType();
if (genericType == null){
genericType = Object.class;
}else if (genericType instanceof ParameterizedType){
ParameterizedType pt = (ParameterizedType) genericType;
Class<?> genericClazz = (Class<?>) pt.getActualTypeArguments()[0];
genericType = genericClazz;
}
while (iterator.hasNext()){
Object nextObject = iterator.next();
Object fieldValue = jsonToBean(nextObject, genericType);
list.add(fieldValue);
}
field.set(classObject,list);
}
}else {
Object fieldValue = jsonToBean(objectValue, field.getType());
field.set(classObject,fieldValue);
}
}
return classObject;
}
}