JSONからJavaクラスを生成する
1. 概要
状況によっては、JSONファイルを使用してPOJOsとも呼ばれるJavaクラスを作成する必要があります。 これは、便利なjsonschema2pojoライブラリを使用してクラス全体を最初から作成しなくても可能です。
このチュートリアルでは、このライブラリを使用してJSONオブジェクトからJavaクラスを作成する方法を説明します。
2. 設定
jsonschema2pojo-core 依存関係を使用して、JSONオブジェクトをJavaクラスに変換できます。
<dependency>
<groupId>org.jsonschema2pojo</groupId>
<artifactId>jsonschema2pojo-core</artifactId>
<version>1.1.1</version>
</dependency>
3. JSONからJavaクラスへの変換
jsonschema2pojo ライブラリを使用してプログラムを作成する方法を見てみましょう。このライブラリは、JSONファイルをJavaクラスに変換します。
まず、JSONファイルをPOJOクラスに変換し、4つのパラメーターを受け入れるメソッドconvertJsonToJavaClassを作成します。
- inputJsonファイルのURL
- POJOが生成されるoutputJavaClassDirectory
- POJOクラスが属するpackageNameと
- 出力POJOclassName。
次に、このメソッドのステップを定義します。
- JCodeModel クラスのオブジェクトを作成することから始めます。これにより、Javaクラスが生成されます。
- 次に、 jsonschema2pojo の構成を定義します。これにより、プログラムは入力ソースファイルがJSONであることを識別できます( getSourceType メソッド)
- さらに、この構成を RuleFactory に渡します。これは、このマッピングの型生成ルールを作成するために使用されます。
- このファクトリとSchemaGeneratorオブジェクトを使用して、 SchemaMapper を作成します。このオブジェクトは、提供されたJSONからJavaタイプを生成します。
- 最後に、JCodeModelのbuildメソッドを呼び出して、出力クラスを作成します。
実装を見てみましょう:
public void convertJsonToJavaClass(URL inputJsonUrl, File outputJavaClassDirectory, String packageName, String javaClassName)
throws IOException {
JCodeModel jcodeModel = new JCodeModel();
GenerationConfig config = new DefaultGenerationConfig() {
@Override
public boolean isGenerateBuilders() {
return true;
}
@Override
public SourceType getSourceType() {
return SourceType.JSON;
}
};
SchemaMapper mapper = new SchemaMapper(new RuleFactory(config, new Jackson2Annotator(config), new SchemaStore()), new SchemaGenerator());
mapper.generate(jcodeModel, javaClassName, packageName, inputJsonUrl);
jcodeModel.build(outputJavaClassDirectory);
}
4. 入出力
このサンプルJSONをプログラムの実行に使用してみましょう。
{
"name": "Baeldung",
"area": "tech blogs",
"author": "Eugen",
"id": 32134,
"topics": [
"java",
"kotlin",
"cs",
"linux"
],
"address": {
"city": "Bucharest",
"country": "Romania"
}
}
プログラムを実行すると、指定されたディレクトリに次のJavaクラスが作成されます。
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({"name", "area", "author", "id", "topics", "address"})
@Generated("jsonschema2pojo")
public class Input {
@JsonProperty("name")
private String name;
@JsonProperty("area")
private String area;
@JsonProperty("author")
private String author;
@JsonProperty("id")
private Integer id;
@JsonProperty("topics")
private List<String> topics = new ArrayList<String>();
@JsonProperty("address")
private Address address;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
// getters & setters
// hashCode & equals
// toString
}
その結果、ネストされたJSONオブジェクトの新しいAddressクラスも作成されたことに注意してください:
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({"city", "country"})
@Generated("jsonschema2pojo")
public class Address {
@JsonProperty("city")
private String city;
@JsonProperty("country")
private String country;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
// getters & setters
// hashCode & equals
// toString
}
jsonschema2pojo.org にアクセスするだけで、これらすべてを実現することもできます。 jsonschema2pojo ツールは、JSON(またはYAML)スキーマドキュメントを取得し、DTOスタイルのJavaクラスを生成します。 コンストラクター、 hashCode、equals、および toString メソッドなど、Javaクラスに含めることを選択できる多くのオプションを提供します。
5. 結論
このチュートリアルでは、 jsonschema2pojo ライブラリを使用した例を使用して、JSONからJavaクラスを作成する方法について説明しました。
いつものように、コードスニペットはGitHubで利用できます。