知識庫 / JSON RSS 訂閱

從JSON生成Java類

JSON
HongKong
9
09:50 PM · Dec 05 ,2025

1. 概述

在某些情況下,我們需要使用 JSON 文件創建 Java 類,也稱為 POJO(Plain Old Java Object)。這可以通過使用方便的 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 類。

首先,我們將創建一個名為 convertJsonToJavaClass 的方法,該方法將 JSON 文件轉換為 POJO 類,並接受四個參數:

  • 一個 inputJson 文件 URL
  • 一個 outputJavaClassDirectory,用於生成 POJO
  • packageName,POJO 所屬的包名
  • 一個輸出 POJO className

然後,我們將定義該方法中的步驟:

  • 我們首先創建一個 JCodeModel 對象,該對象將生成 Java 類
  • 然後,我們將定義 jsonschema2pojo 的配置,這允許程序識別輸入源文件是 JSON(getSourceType 方法)
  • 此外,我們將將此配置傳遞給 RuleFactory,該工廠將用於為此映射創建類型生成規則
  • 我們使用此工廠以及 SchemaGenerator 對象創建一個 SchemaMapper,該對象從提供的 JSON 生成 Java 類型
  • 最後,我們將調用 JCodeModelbuild 方法以創建輸出類。

讓我們看看實現:

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
}

請注意,這同時也創建了一個新的 Address 類用於嵌套的 JSON 對象:

@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 類。 它提供了許多選項,您可以選擇包含在 Java 類中,包括構造函數以及 hashCode, equalstoString 方法。

5. 結論

在本教程中,我們介紹瞭如何使用示例代碼,通過 jsonschema2pojo 庫從 JSON 創建 Java 類。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.