版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34942689/article/details/86571493
在日常开发过程中,反射对于工程师来说一直都是一个很好的工具 .先简单介绍一下反射的几种实现方式
创建一个类对象 Class c = A.class;
方法一、通过获取类对象的方式 Class c2 = new A().getClass();
方法二、通过类名获取Class c3 = Class.forName(“A”);
方法三、通过new一个新的类对象A a = (A) c.newInstance();
接下来就使用基础的反射操作来实现一个对象转换成JSON
public class JsonUtil {
/**
* 将指定的对象转换成JSON字符串
*
* @param object
* @return
*/
public static String parseObject(Object object, Converter... converters) {
if (object != null) {
// 获得需要操作的对象的Class对象
Class c = object.getClass();
// 获得这个类中的所有属性
Field[] fields = c.getDeclaredFields();
// 拼接JSON
StringBuilder sb = new StringBuilder();
sb.append("{");
// 循环遍历属性
for (Field f : fields) {
int m = f.getModifiers();
NoJSON noJSON = f.getAnnotation(NoJSON.class);
if (!Modifier.isStatic(m) && noJSON == null) {
f.setAccessible(true);
if (sb.length() != 1) {
sb.append(",");
}
sb.append("\"" + f.getName() + "\"");
sb.append(":");
Object value = null;
try {
value = f.get(object);
} catch (Exception e) {
e.printStackTrace();
}
sb.append(PerseValue(value, converters));
}
}
sb.append("}");
return sb.toString();
}
return null;
}
/**
* 解析对应的值
* @param value
* @param converters
* @return
*/
private static String PerseValue(Object value, Converter... converters) {
String resultStr = null;
if (converters != null && converters.length > 0) {
for (Converter converter : converters) {
if (converter.getType() == value.getClass()) {
resultStr = converter.converString(value);
return "\"" + resultStr + "\"";
}
}
}
if (value != null) {
if (value instanceof Number) {
resultStr = String.valueOf(value);
} else if (value instanceof String || value instanceof Character || value instanceof Boolean) {
resultStr = "\"" + value + "\"";
} else if (value instanceof Collection) {
resultStr = parseCollection((Collection<?>) value);
} else if (value instanceof Map) {
resultStr = parseMap((Map) value);
} else if (value.getClass().isArray()) {
resultStr = parseArray((Object[]) value);
} else {
resultStr = parseObject(value);
}
}
return resultStr;
}
/**
* 将指定类型的数组转换成 json 字符串
*
* @param value
* @return
*/
private static String parseArray(Object[] value) {
return parseCollection(new ArrayList<>(Arrays.asList(value)));
}
// 创建一个转换器
public interface Converter {
// 返回想要转换的数据类型
Class getType();
// 将值通过自定义的方式转换成String
String converString(Object value);
}
/**
* 将指定的集合转换成JSON字符串
*
* @return
*/
public static String parseCollection(Collection<?> collection, Converter... converters) {
StringBuilder sb = new StringBuilder();
sb.append("[");
for (Object value : collection) {
if (sb.length() != 1) {
sb.append(",");
}
sb.append(PerseValue(value, converters));
}
sb.append("]");
return sb.toString();
}
/**
* 将指定的map转换成JSON字符串
*
* @return
*/
public static String parseMap(Map<?, ?> map, Converter... converters) {
StringBuilder sb = new StringBuilder();
sb.append("{");
for (Entry entry : map.entrySet()) {
if (sb.length() != 1) {
sb.append(",");
}
sb.append("\"" + entry.getKey() + "\":");
sb.append(PerseValue(entry.getValue(), converters));
}
sb.append("}");
return sb.toString();
}