知識庫 / JSON RSS 訂閱

從 Java 中移除 JSON 文件中的空格

JSON
HongKong
10
09:46 PM · Dec 05 ,2025

1. 簡介

本教程將探討如何使用 Java 從 JSON 數據中去除多餘空格以進行壓縮。

我們經常會遇到需要對提供的 JSON 數據進行壓縮以優化存儲,或者需要去除多餘空格以便輕鬆比較多個 JSON 對象的情況。

為了實現這些目標,我們將利用 Jackson 和 Gson 庫的功能,這些庫將有助於從提供的 JSON 數據中去除空格。

2. 使用自定義邏輯移除空格

JSON 數據通常使用冒號(“:”)分隔鍵和值,使用逗號(“,”)分隔鍵值對。鑑於 JSON 鍵被引號(“:”)括起來,JSON 字符串使用轉義序列,我們可以實現一種邏輯,逐字符讀取並構建 JSON 字符串,不包含任何額外的空格。

通過仔細處理字符並考慮引號和轉義序列,我們可以確保生成乾淨且正確格式化的 JSON 輸出:

public String removeExtraWhiteSpaces(String jsonString) {
    StringBuilder result = new StringBuilder(json.length());
    boolean inQuotes = false;
    boolean escapeMode = false;
    for (char character : json.toCharArray()) {
        if (escapeMode) {
            result.append(character);
            escapeMode = false;
        } else if (character == '"') {
            inQuotes = !inQuotes;
            result.append(character);
        } else if (character == '\\') {
            escapeMode = true;
            result.append(character);
        } else if (!inQuotes && character == ' ') {
            continue;
        } else {
            result.append(character);
        }
    }
    return result.toString();
}

讓我們假設我們已經定義了一個名為 inputJson 的 JSON 字符串:

{
    "name" : "John",
    "address" : "New       York",
    "age" : 30,
    "phoneNumber" : 9999999999
}

我們希望結果 JSON 字符串(定義為 expectedJson)沒有額外的空格:

{"name":"John","address":"New       York","age":30,"phoneNumber":9999999999}


讓我們將 inputJson 作為字符串讀取,並移除空白字符:

@Test
public void givenWhiteSpaceRemoval_whenJsonContainWhitespaces_thenWhitespaceRemoved() {
    String result = removeExtraWhitespaces(inputJson);
    assertEquals(expectedJson, result); 
}

3. 使用 Jackson 移除空格

為了使用 Jackson 移除空格,首先需要在 `pom.xml</em/> 文件中添加以下依賴項:

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

強烈建議您從 Maven 中央倉庫獲取最新版本,使用 jackson-databind 庫。

要從 JSON 字符串中移除多餘的空格,我們將使用 writeValueAsString() 方法:

public String removeExtraWhitespacesUsingJackson(String json) {
    ObjectMapper objectMapper = new ObjectMapper();
    JsonNode jsonNode = objectMapper.readTree(json);
    return objectMapper.writeValueAsString(jsonNode); 
}

讓我們假設我們已經定義了一個名為 inputJson 的 JSON 字符串:

{
    "name" : "John",
    "address" : "New       York",
    "age" : 30,
    "phoneNumber" : 9999999999
}

我們希望結果 JSON 字符串(定義為 expectedJson)不包含額外的空格:

{"name":"John","address":"New       York","age":30,"phoneNumber":9999999999}


讓我們使用 inputJson 作為字符串,並移除空白字符:

@Test
public void giveWhiteSpaceRemovalUsingJackson_whenJsonContainWhitespaces_thenWhitespaceRemoved(){
    String result = removeExtraWhitespaceUsingJackson(inputJson);   
    assertEquals(expectedJson, result);
}

4. 使用 Gson 移除空格

首先,添加 Gson Maven 依賴項:

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.11.0</version>
</dependency>

我們鼓勵您始終使用最新版本的 gson 庫,從 Maven 中央倉庫獲取。

為了從 JSON 字符串中移除空格,我們需要使用自定義 JsonSerializer

我們將使用自定義 StringSerializer 來從 JSON 字符串值中移除空格。 通過將此序列化器與 GsonBuilder 註冊,Gson 將會應用自定義的字符串序列化邏輯,從而在保留 JSON 結構的同時,從值中移除空格。

public String removeWhitespacesUsingGson(String json) {
    Gson gson = new GsonBuilder().registerTypeAdapter(String.class, new StringSerializer()).create();
    JsonElement jsonElement = gson.fromJson(json, JsonElement.class);
    return gson.toJson(jsonElement);
}

class StringSerializer implements JsonSerializer<String> {
    @Override
    public JsonElement serialize(String src, Type typeOfSrc, JsonSerializationContext context) {
        return new JsonPrimitive(src.trim());
    }
}

讓我們使用之前定義的 inputJson 變量中定義的相同 JSON 字符串:

{
    "name" : "John",
    "address" : "New       York",
    "age" : 30,
    "phoneNumber" : 9999999999
}

為了生成不包含額外空格的JSON字符串(定義為expectedJson):

{"name":"John","address":"New       York","age":30,"phoneNumber":9999999999}


讓我們使用 inputJson 作為字符串,並移除空白字符:

@Test
public void giveWhitespaceRemovalUsingGson_whenJsonContainsWhitespaces_thenWhitespaceRemoved() {
    String result = removeWhitespacesUsingGson(inputJson);
    assertEquals(expectedJson, result);
}

5. 結論

在本文中,我們探討了多種用於從 JSON 字符串中刪除多餘空格的方法,這些方法適用於 Java 編程環境。

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

發佈 評論

Some HTML is okay.