从 Java 类生成 JSON 模式
Posted
技术标签:
【中文标题】从 Java 类生成 JSON 模式【英文标题】:Generate JSON schema from Java class 【发布时间】:2014-11-29 17:42:39 【问题描述】:我有一个 POJO 类:
public class Stock
int id;
String name;
Date date;
是否有任何注释或开发框架/API 可以将 POJO 转换为 JSON 模式,如下所示:
"id":
"type" : "int"
,
"name":
"type" : "string"
"date":
"type" : "Date"
我还可以通过在 POJO 上指定一些注释或配置来扩展架构以添加"Required" : "Yes"
、每个字段的描述等信息,并且可以生成如下所示的 JSON 架构:
"id":
"type" : "int",
"Required" : "Yes",
"format" : "id must not be greater than 99999",
"description" : "id of the stock"
,
"name":
"type" : "string",
"Required" : "Yes",
"format" : "name must not be empty and must be 15-30 characters length",
"description" : "name of the stock"
"date":
"type" : "Date",
"Required" : "Yes",
"format" : "must be in EST format",
"description" : "filing date of the stock"
【问题讨论】:
这就是您要找的东西吗? ***.com/questions/9593409/convert-pojo-to-json 不,将 pojo 转换为 json 对象。我正在寻找生成 JSON 模式作为元 [有关映射到 pojo 字段的输入表单字段的信息,如数据类型,是否需要等,] 给最终用户)。 这里是一个在线站点,它将从 json 生成 json 模式:jsonschema.net Tool to generate JSON schema from JSON data 的可能副本 其实我不是在寻找任何工具。我需要一个可以有帮助类或注释的 api 来描述 pojo 中字段的行为。例如。我今天最近发现jackson 2.4.1 有新的注释@JsonPropertyDescription 来将描述添加到pojo 中的字段; [链接]***.com/questions/24515917/….有没有可能通过反射来实现我帖子中的示例? 【参考方案1】:Jackson JSON Schema 模块就是一个这样的工具:
https://github.com/FasterXML/jackson-module-jsonSchema
它使用 Jackson 数据绑定的 POJO 自省来遍历 POJO 属性,同时考虑到 Jackson 注释,并生成 JSON Schema 对象,然后可以将其序列化为 JSON 或用于其他目的。
【讨论】:
如果您的复杂对象包含需要保持枚举的枚举类型,则您指定的模块不起作用。请参阅下面的答案以获得更好的工具(仍然是杰克逊,但杰克逊映射器。)链接中的说明导致枚举在架构中呈现为简单字符串 是的,我看到了一个错误报告。我希望我们为该模块获得更多的贡献者——它是外部贡献,被广泛使用,但目前还没有专门的所有者。 投反对票...不是因为它是一个糟糕的答案,只是因为它对今天来说是一个糟糕的答案。该库不再维护。【参考方案2】:Java JSON 模式生成器:https://github.com/victools/jsonschema-generator
使用 Jackson 从 Java 类创建 JSON Schema(Draft 6、Draft 7 或 Draft 2019-09)。
【讨论】:
【参考方案3】:使用 JJschema。它可以生成符合草案 4 的 JSON 模式。详情请参考这篇帖子http://wilddiary.com/generate-json-schema-from-java-class/。
虽然Jackson Json Schema module 也可以生成架构,但截至目前,它只能生成符合草案 3 的架构。
【讨论】:
github.com/mbknor/mbknor-jackson-jsonSchema 可以根据 Jackson 注解生成 Draft 4 架构【参考方案4】:public static String getJsonSchema(Class clazz) throws IOException
Field[] fields = clazz.getDeclaredFields();
List<Map<String,String>> map=new ArrayList<Map<String,String>>();
for (Field field : fields)
HashMap<String, String> objMap=new HashMap<String, String>();
objMap.put("name", field.getName());
objMap.put("type", field.getType().getSimpleName());
objMap.put("format", "");
map.add(objMap);
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(map);
return json;
【讨论】:
以上是关于从 Java 类生成 JSON 模式的主要内容,如果未能解决你的问题,请参考以下文章