0

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

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 端具有类似的功能。

我试着用

new ObjectMapper.writeValuesToString(SQL);

然而,这是不可能的,因为它只转换一个实例化的对象

4

1 回答 1

2

您可以通过使用反射来实现您想要的东西。您可以将简单的方法添加到您的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" ]
  }
}
于 2013-11-12T23:07:27.843 回答