Java 中 JSON

Jackson
Remote
1
11:10 PM · Nov 30 ,2025

1. 概述

使用Java處理JSON數據可以很容易,但——就像Java中的任何事物一樣,我們有許多選項和庫可以選擇。

本指南應該使您做出選擇更容易,併為您提供對生態系統的堅實理解。我們將討論Java中最常見的JSON處理庫:

我們為每個庫採用簡單的結構——首先是一些有用的資源,以便您入門(既包括Baeldung上的資源,也包括外部資源)。然後我們將介紹一個基本代碼示例,以便您瞭解使用該庫時的實際情況。

2. 流行度及基本統計信息

首先,讓我們用統計數據作為每個庫流行度的代理:

2.1. Jackson

2.2. Gson

  • Maven 使用量:Maven (1588
  • Github Stars: 2079
  • Github Forks: 471

2.3. json-io

  • Maven 使用量:Maven (11
  • Github Stars: 129
  • Github Forks: 40

2.4. Genson

  • Maven 使用量:Maven (8
  • Github Stars: 67
  • Github Forks: 15

2.5. JSON-P

  • Github Stars: 119
  • Github Forks: 54

3. Jackson

接下來,讓我們看看這些中最受歡迎的之一——Jackson。Jackson 是一個多用途的 Java 庫,用於處理 JSON 數據。

3.1. 有用資源

以下是庫的官方資源:

在 Baeldung 上:

  • Jackson 教程
  • Jackson Date
  • Jackson JSON Views
  • 關於 Jackson 註解的指南
  • Jackson 異常 – 問題與解決方案
  • Jackson – 序列化/反序列化哪些字段
  • Jackson – 雙向關係
  • Jackson – 自定義序列化器
  • Jackson – 自定義反序列器

其他有趣的寫篇:

3.2. Maven 依賴

要使用該庫——這是要添加到你的 pom.xml 的 Maven 依賴:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.17.2</version>
</dependency>

請確保獲取 最新版本 的 Jackson。

3.3. 簡單的示例與 Jackson

現在,讓我們看看如何在簡單的示例中使用 Jackson:

@Test
public void whenSerializeAndDeserializeUsingJackson_thenCorrect()
  throws IOException{
    Foo foo = new Foo(1,"first");
    ObjectMapper mapper = new ObjectMapper();

    String jsonStr = mapper.writeValueAsString(foo);
    Foo result = mapper.readValue(jsonStr, Foo.class);
    assertEquals(foo.getId(),result.getId());
}

請注意:

  • ObjectMapper.writeValueAsString() 用於將對象序列化為 JSON 字符串。
  • ObjectMapper.readValue() 用於將 JSON 字符串反序列化為 Java 對象。
  • 示例 JSON 輸出:
{
    "id":1,
    "name":"first"
}

4. Gson

Gson 是我們將要查看的下一個 Java JSON 庫。

4.1. 有用資源

以下是庫的官方資源:

在 Baeldung 上:

  • Gson 序列化菜譜
  • Gson 反序列化菜譜

其他有趣的文檔:

4.2. Maven 依賴

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>${gson.version}</version>
</dependency>

注意,Gson 的最新版本可以在 這裏,現在是 2.8.8.

4.3. 簡單示例使用 Gson

這是一個簡單的示例,説明了如何使用 Gson 將對象序列化為 JSON 和反序列化為 Java 對象:

@Test
public void whenSerializeAndDeserializeUsingGson_thenCorrect(){
    Gson gson = new Gson();
    Foo foo = new Foo(1,"first");

    String jsonStr = gson.toJson(foo);
    Foo result = gson.fromJson(jsonStr, Foo.class);
    assertEquals(foo.getId(),result.getId());
}

注意:

  • Gson.toJson() 用於將對象序列化為 JSON
  • Gson.fromJson() 用於將 JSON 反序列化為 Java 對象

5. Json-ioJson-io 是一個簡單的 Java 庫,用於序列化/反序列化 JSON。

5.1. 有用資源以下是庫的官方資源:

json-io 在 Google Codejson-io 在 Github5.2. Maven 依賴<dependency> <groupId>com.cedarsoftware</groupId> <artifactId>json-io</artifactId> <version>${json-io.version}</version> </dependency>請注意,json-io 目前的最新版本是 4.13.0

5.3. 使用 json-io 的簡單示例現在,讓我們看一下使用 json-io 的一個簡單示例:

@Test
public void whenSerializeAndDeserializeUsingJsonio_thenCorrect(){
    Foo foo = new Foo(1,"first");

    String jsonStr = JsonWriter.objectToJson(foo);
    Foo result = (Foo) JsonReader.jsonToJava(jsonStr);
    assertEquals(foo.getId(),result.getId());
}請注意:

JsonWriter.objectToJson() 用於將對象序列化為 JSON。JsonReader.jsonToJava() 用於將 JSON 反序列化為 Java 對象。示例 JSON 輸出: { "@type":"org.baeldung.Foo", "id":1, "name":"first" }6. Genson

Genson 是一個 Java 和 Scala 到 JSON 轉換庫,提供完整的綁定和流式處理。

6.1. 有用資源

以下是庫的官方資源:

6.2. Maven 依賴

<dependency>
    <groupId>com.owlike</groupId>
    <artifactId>genson</artifactId>
    <version>${genson.version}</version>
</dependency>

請注意,Genson 的最新版本 目前是 1.6。

6.3. 使用 Genson 的簡單示例

這是一個使用庫的簡單示例:

@Test
public void whenSerializeAndDeserializeUsingGenson_thenCorrect(){
    Genson genson = new Genson();
    Foo foo = new Foo(1,"first");

    String jsonStr = genson.serialize(foo);
    Foo result = genson.deserialize(jsonStr, Foo.class);
    assertEquals(foo.getId(),result.getId());
}

請注意:

  • Genson.serialize() 用於將 Object 序列化為 JSON
  • Genson.desrialize() 用於將 JSON 序列化為 Java Object

7. JSON-P

JSON-P 是一個 Java API,用於解析、構建、轉換和查詢 JSON 消息。 Java Specification Request (JSR) 353 提出了該 API。 JSR 353 的目標是開發一個 Java API 來處理 JSON。 許多流行的庫,如 Jackson、Gson 等,並不直接實現該規範。

7.1. 有用資源

以下是一些該庫的官方資源:

7.2. Maven 依賴


<dependency>
    <groupId>jakarta.json</groupId>
    <artifactId>jakarta.json-api</artifactId>
    <version>${jsonp.version}</version>
</dependency>

<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>jakarta.json</artifactId>
    <version>${provider.version}</version>
    <classifier>module<classifier> 
</dependency>

請注意,我們需要 API 模塊默認提供者 依賴。 最新版本分別是 2.1.12.0.1

7.3. 簡單示例與 JSON-P

讓我們看一下 JSON-P 的簡單用法:

@Test
public void whenTransformingAndParsingUsingJsonp_thenCorrect() {
    Foo foo = new Foo(1, "First");
    JsonObject json = Json.createObjectBuilder()
      .add("id", foo.getId())
      .add("name", foo.getName())
      .build();
    String result = json.toString();
        
    JsonParser parser = Json.createParser(new StringReader(result));
    while (parser.hasNext()) {
        Event event = parser.next();
        switch (event) {
            case VALUE_STRING:
                String value = parser.getString();
                assertEquals(foo.getName(), value);
                break;
        }
    }
    parser.close();
}

請注意:

  • Json.createObjectBuilder() 用於將對象轉換為 JSON。
  • Json.createParser() 用於解析 JSON 消息。
  • JSON-P API 與 Java 中的其他 JSON 處理庫相比,屬於低級。

8. 結論

在本文快速概述中,我們學習了 Java 中最常用的 JSON 處理庫。

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

發佈 評論

Some HTML is okay.