我想知道是否可以用杰克逊转换静态类而不是自己做一个解析器。例如,我有下一个静态类:
public static class SQL {
public enum Table {
CREATE,
ALTER
}
public enum Database {
CREATE
}
}
我想转换为下一个Json String
{
"SQL" :
{
"Table":
{"CREATE": "CREATE", "ALTER": "ALTER"},
{"CREATE": "CREATE"}
}
}
这是因为我可以在Java中使用这个类创建出色的字符串,我想在Javascript Side中使用类似的功能。
我尝试使用
new ObjectMapper.writeValuesToString(SQL);
但是,这是不可能的,因为它只转换实例化的对象
答案 0 :(得分:2)
您可以使用Reflection实现您想要的效果。您可以向SQL
类添加简单方法,该类可以返回Map
。
public static Map<String, ?> toJsonMap() {
Map<String, Object> map = new HashMap<String, Object>();
Class<?>[] declaredClasses = SQL.class.getDeclaredClasses();
for (Class<?> clazz : declaredClasses) {
if (clazz.isEnum()) {
map.put(clazz.getSimpleName(), clazz.getEnumConstants());
} else {
// ...
}
}
return Collections.singletonMap(SQL.class.getSimpleName(), map);
}
简单用法:
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(SQL.toJsonMap()));
以上程序打印:
{
"SQL" : {
"Database" : [ "CREATE" ],
"Table" : [ "CREATE", "ALTER" ]
}
}