是否可以使用Jackson将静态类转换为JSON?

时间:2013-11-12 19:01:14

标签: java json class static jackson

我想知道是否可以用杰克逊转换静态类而不是自己做一个解析器。例如,我有下一个静态类:

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);

但是,这是不可能的,因为它只转换实例化的对象

1 个答案:

答案 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" ]
  }
}