Java组装json
程序员文章站
2022-05-08 19:15:40
...
Java组装json,零侵入,自定义实现。
/**
* @author zhangshiqiang on 2019/10/24.
*/
public interface IFieldAssembleJson {
/**
* 组装各种数据类型的json体
*
* @param sb
* @param fieldName
* @param value
* @return
*/
StringBuilder assemble(StringBuilder sb, String fieldName, Object value);
}
/**
* @author zhangshiqiang on 2019/10/24.
*/
public class NumberField implements IFieldAssembleJson {
@Override
public StringBuilder assemble(StringBuilder sb, String fieldName, Object value) {
return sb.append('"')
.append(fieldName)
.append('"')
.append(':')
.append(value)
;
}
}
/**
* @author zhangshiqiang on 2019/10/24.
*/
public class StringField implements IFieldAssembleJson {
@Override
public StringBuilder assemble(StringBuilder sb, String fieldName, Object value) {
return sb.append('"')
.append(fieldName)
.append('"')
.append(':')
.append('"')
.append(value)
.append('"')
;
}
}
/**
* @author zhangshiqiang on 2019/10/24.
*/
public class FieldAssembleJsonUtil {
private static Map<Class<?>, IFieldAssembleJson> map = new HashMap<>();
static {
// 公用一个
NumberField numberField = new NumberField();
map.put(int.class, numberField);
map.put(Integer.class, numberField);
map.put(short.class, numberField);
map.put(Short.class, numberField);
map.put(byte.class, numberField);
map.put(Byte.class, numberField);
map.put(long.class, numberField);
map.put(Long.class, numberField);
map.put(String.class, new StringField());
}
public static void process(StringBuilder sb,
String fieldName,
Object value) {
Class<?> clazz = value.getClass();
if (map.get(clazz) == null) {
throw new RuntimeException("暂未支持此数据类型");
}
map.get(clazz).assemble(sb, fieldName, value);
}
}
/**
* @author zhangshiqiang on 2019/10/24.
*/
public class ClassUtil {
/**
* 暂时只支持基础数据类型与String数据类型 TODO
*
* @param t
* @param <T>
* @return
*/
public static <T> String toJson(T t) {
StringBuilder sb = new StringBuilder();
sb.append('{');
Field[] declaredFields = t.getClass().getDeclaredFields();
int i = 0;
for (Field declaredField : declaredFields) {
declaredField.setAccessible(true);
Object obj = null;
try {
obj = declaredField.get(t);
} catch (IllegalAccessException e) {
// ignore
}
if (obj == null || "null".equals(obj.toString())) {
continue;
}
if (i++ > 0) {
sb.append(',');
}
String fieldName = declaredField.getName();
// 拼接 json
FieldAssembleJsonUtil.process(sb, fieldName, obj);
}
sb.append('}');
return sb.toString();
}
}
上一篇: windows IE 代理 bat
推荐阅读
-
ant编译java报“非法字符: \65279 ”错误的解决方法 z
-
Java的参数传递是「按值传递」还是「按引用传递」?
-
安装ssl证书后报错Caused by: java.io.IOException: DerInputStream.getLength(): lengthTag=109, too big.
-
java获取文件的mime,java获取文件是不是文本,java获取文件类型(非后缀方式)
-
Python学习笔记:json模块和pickle模块
-
针对JSON 返回String 类型
-
【JAVA设计模式】- 建造者模式
-
Java中静态代码块、构造代码块、构造函数、普通代码块
-
01 java 基础:jdk jre path classpath 相关问题
-
Java的内存溢出