web-dev-qa-db-ja.com

JavaクラスからJSONスキーマを生成

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"
      }
}
37
user3587174

私は自分でこれを行う必要がありましたが、最新のスキーマ仕様(この投稿の時点でv4)を取得する必要がありました。私の解決策は、以下のリンクの最初の答えです: POJOからJsonスキーマをねじれで生成

Com.fasterxml.jackson.databindパッケージではなく、org.codehaus.jackson.mapパッケージのオブジェクトを使用します。 this ページの指示に従っている場合は、間違っています。代わりにjackson-mapperモジュールを使用してください。

将来のGoogle社員向けのコードは次のとおりです。

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);
}
24
StormeHawke

そのようなツールの1つがJackson JSON Schemaモジュールです。

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

jacksonデータバインドのPOJOイントロスペクションを使用して、Jacksonアノテーションを考慮してPOJOプロパティをトラバースし、JSONスキーマオブジェクトを生成します。JSONスキーマオブジェクトは、JSONとしてシリアル化されるか、他の目的に使用されます。

12
StaxMan

JJschemaを使用します。ドラフト4準拠のJSONスキーマを生成できます。詳細については、この投稿を参照してください http://wilddiary.com/generate-json-schema-from-Java-class/ .

Jackson Json Schema module もスキーマを生成できますが、今日の時点ではドラフト3準拠のスキーマのみを生成できます。

2
Drona
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;
    }
0
P Rajesh