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 編程環境。