java反射实现自定义json转对象方法-忽略字段大小写、字段个数
开发过程中经常会遇到json转对象,可以使用FastJson或者Gson自带的工具类进行转换,但当遇到json与对象属性名称大小写不一致时,就需要我们自己处理,很早之前写了一个利用反射来实现忽略字段名称大小写,并且可以实现json字段多于对象属性时的对象赋值
/**
* 对于对象属性与json字段名称大小写不一致时,进行对象的赋值
* @param json json字符串
* @param obj 需要转换的对象
* @return
*/
public static Object jsonToObject(String jsonStr, Object obj) {
if((jsonStr) || obj==null) {
return null;
}
JSONObject json = (jsonStr);
Field[] fields = ().getDeclaredFields();
(fields, true);
//循环获取所有json字段,并将字段名全部小写
Map<String, String> jsonMap = new HashMap<String, String>();
for(String key:()) {
((), key);
}
//循环对象属性,与json进行匹配
Field field = null;
String fieldName = null;
String fieldTypeName = null;
for(int i=0;i<;i++) {
field = fields[i];
//属性名称全部转小写
fieldName = ().toLowerCase();
fieldTypeName = ().getName();
//如果json中存在相同字段,则进行赋值
if((fieldName)) {
try {
(obj, getJsonData(json, (fieldName), fieldTypeName));
} catch (Exception e) {
();
}
}
}
return obj;
}
/**
* 按字段类型获取JSON数据,字段类型按需扩展
* @param json JSON对象
* @param fieldName 字段名
* @param fieldTypeName 字段属性名
* @return
*/
private static Object getJsonData(JSONObject json, String fieldName, String fieldTypeName) {
Object jsonData = null;
//类型按需添加
if ("".equals(fieldTypeName)) {
jsonData = (fieldName);
} else if ("".equals(fieldTypeName)){
jsonData = (fieldName);
} else if ("double".equals(fieldTypeName)){
jsonData = (fieldName);
} else if ("int".equals(fieldTypeName)){
jsonData = (fieldName);
} else {
jsonData = (fieldName);
}
return jsonData;
}