從 Java 中的 JSON 中刪除空格
一、簡介
在本教程中,我們將探索從 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();
}
假設我們已將以下 JSON 字符串定義為inputJson
變量:
{
"name" : "John",
"address" : "New York",
"age" : 30,
"phoneNumber" : 9999999999
}
我們希望結果 JSON 字符串(定義為expectedJson)
沒有額外的空格:
{"name":"John","address":"New York","age":30,"phoneNumber":9999999999}
讓我們將inputJson
讀取為 String 並刪除空格:
@Test
public void givenWhiteSpaceRemoval_whenJsonContainWhitespaces_thenWhitespaceRemoved() {
String result = removeExtraWhitespaces(inputJson);
assertEquals(expectedJson, result);
}
3. 使用 Jackson 刪除空格
要使用 Jackson 刪除空格,我們首先將以下依賴項添加到pom.xml
文件:
<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);
}
假設我們已將以下 JSON 字符串定義為inputJson
變量:
{
"name" : "John",
"address" : "New York",
"age" : 30,
"phoneNumber" : 9999999999
}
我們希望結果 JSON 字符串(定義為expectedJson)
沒有額外的空格:
{"name":"John","address":"New York","age":30,"phoneNumber":9999999999}
讓我們使用inputJson
作為 String 並刪除空格:
@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.10.1</version>
</dependency>
我們鼓勵您始終使用 Maven 中央存儲庫中最新版本的gson
庫。
要從 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
作為 String 並刪除空格:
@Test
public void giveWhitespaceRemovalUsingGson_whenJsonContainsWhitespaces_thenWhitespaceRemoved() {
String result = removeWhitespacesUsingGson(inputJson);
assertEquals(expectedJson, result);
}
5. 結論
在本文中,我們探索了從 Java 中的 JSON 字符串中刪除多餘空格的各種方法。
本文隨附的源代碼可在 GitHub 上獲取。