Generate JSON schema from Java class

99,235

Solution 1

One such tool is Jackson JSON Schema module:

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

which uses Jackson databind's POJO introspection to traverse POJO properties, taking into account Jackson annotations, and produces a JSON Schema object, which may then be serialized as JSON or used for other purposes.

Solution 2

Java JSON Schema Generator: https://github.com/victools/jsonschema-generator

Creates JSON Schema (Draft 6, Draft 7 or Draft 2019-09) from Java classes using Jackson.

Solution 3

Use JJschema. It can generate draft 4 compliant JSON schemas. Refer this post http://wilddiary.com/generate-json-schema-from-java-class/ for details.

Though Jackson Json Schema module can too generate schema but it can, as of today, only generate draft 3 compliant schemas only.

Solution 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;
    }
Share:
99,235

Related videos on Youtube

user3587174
Author by

user3587174

Updated on July 09, 2022

Comments

  • user3587174
    user3587174 almost 2 years

    I have a POJO class:

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

    Are there any annotations or development framework/API that can convert POJO to JSON schema like below:

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

    And also I can expand the schema to add information like "Required" : "Yes", description for each field, etc., by specifying some annotations or configurations on POJO and can generate JSON Schema like below:

    {"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"
          }
    }
    
    • eri0o
      eri0o over 9 years
    • user3587174
      user3587174 over 9 years
      No, that converts pojo to json object. I am looking for generating JSON schema as meta [information about the input form fields mapped to pojo fields like datatype, whether it is required or not, etc., ] to the end users).
    • DwB
      DwB over 9 years
      Here is an online site that will produce json schema from json: jsonschema.net
    • DwB
      DwB over 9 years
    • user3587174
      user3587174 over 9 years
      Actually, I am not looking for any tools. I need an api that can have helper classes or annotations to describe the behavior of fields in a pojo. E.g. i recently found today that jackson 2.4.1 has new annotation @JsonPropertyDescription to add the description to the field in a pojo; [link]stackoverflow.com/questions/24515917/…. Is there a possible way to achieve the example in my post through reflection?
    • user3587174
      user3587174 over 9 years
      I noticed Jackson doesn't have this feature yet, so i chose to build metadata using reflection on the pojo.
    • StaxMan
      StaxMan over 9 years
      Jackson does have this functionality via JSON Schema module: github.com/FasterXML/jackson-module-jsonSchema
  • StormeHawke
    StormeHawke over 9 years
    The module you specify doesn't work if you have complex objects containing enum types that need to stay enums. See my answer below for a better tool (Still Jackson, but jackson-mapper.) The instructions at your link result in Enums being rendered as simple strings in the schema
  • StaxMan
    StaxMan over 9 years
    Yes, I saw a bug report. I hope we get more contributors for the module -- it's external contribution, quite widely used, but no dedicated owner at this point.
  • mbknor
    mbknor over 7 years
    github.com/mbknor/mbknor-jackson-jsonSchema can generate Draft 4 schema based on Jackson annotations
  • Robert
    Robert over 2 years
    Downvoted... not because it was a bad answer, just because it's a bad answer for today. This library is not being maintained anymore.