从java类生成JSON模式

时间:2014-10-05 04:50:20

标签: json jackson jsonschema fasterxml jackson-modules

我有一个POJO课程

public class Stock{
 int id;
 String name;
 Date date;
}

是否有任何可以将POJO转换为JSON模式的注释或开发框架/ api,如下所示

{"id":
      {             
        "type" : "int"
      },
"name":{   
        "type" : "string"
       }
"date":{
        "type" : "Date"
      }
}

我还可以通过在POJO上指定一些注释或配置来扩展架构以添加诸如“必需”之类的信息:“是”,每个字段的描述等,并且可以生成如下的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"
      }
}

5 个答案:

答案 0 :(得分:23)

我自己需要这样做,但需要获得最新的架构规范(v4截至本文)。我的解决方案是以下链接的第一个答案: Generate Json Schema from POJO with a twist

使用org.codehaus.jackson.map包中的对象而不是com.fasterxml.jackson.databind包。如果您按照this页面上的说明操作,那么您做错了。只需使用jackson-mapper模块即可。

以下是未来googlers的代码:

private static String getJsonSchema(Class clazz) throws IOException {
    org.codehaus.jackson.map.ObjectMapper mapper = new ObjectMapper();
    //There are other configuration options you can set.  This is the one I needed.
    mapper.configure(SerializationConfig.Feature.WRITE_ENUMS_USING_TO_STRING, true);

    JsonSchema schema = mapper.generateJsonSchema(clazz);

    return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(schema);
}

答案 1 :(得分:9)

一个这样的工具是Jackson JSON Schema模块:

https://github.com/FasterXML/jackson-module-jsonSchema

使用Jackson databind的POJO内省来遍历POJO属性,同时考虑Jackson注释,并生成一个JSON Schema对象,然后可以将其序列化为JSON或用于其他目的。

答案 2 :(得分:2)

使用JJschema。它可以生成草案4兼容的JSON模式。有关详细信息,请参阅此帖http://wilddiary.com/generate-json-schema-from-java-class/

虽然Jackson Json Schema module也可以生成架构但是,截至今天,它只能生成草案3兼容架构。

答案 3 :(得分:1)

Java JSON 模式生成器:https://github.com/victools/jsonschema-generator

使用 Jackson 从 Java 类创建 JSON 模式(草案 6、草案 7 或草案 2019-09)。

答案 4 :(得分:0)

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