[java] 자바에서 JSON 데이터의 중복값 제거하기
자바에서 JSON 데이터를 다룰 때 중복값을 제거하는 방법을 알아보겠습니다.
1. Gson 라이브러리 추가
먼저, Gson 라이브러리를 프로젝트에 추가해야 합니다. Gson은 Google이 제공하는 JSON 데이터 처리를 위한 라이브러리입니다.
Maven을 사용하는 경우, pom.xml
파일에 다음 의존성을 추가합니다:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
</dependency>
Gradle을 사용하는 경우, build.gradle
파일에 다음 의존성을 추가합니다:
implementation 'com.google.code.gson:gson:2.8.6'
의존성을 추가한 후에는 해당 라이브러리를 import 해야 합니다:
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
2. 중복값 제거하기
JSON 데이터에서 중복값을 제거하기 위해서는 다음과 같은 알고리즘을 사용할 수 있습니다:
- JSON 데이터를 파싱하여 JsonArray나 JsonObject로 변환합니다.
- 중복값을 제거하기 위해 Set을 사용합니다.
- JsonArray나 JsonObject를 순회하며 중복값을 Set에 추가합니다.
- Set에 있는 값을 다시 JsonArray나 JsonObject로 변환합니다.
- 변환한 결과를 다시 JSON으로 직렬화합니다.
다음은 이 알고리즘을 구현한 예제 코드입니다:
public static String removeDuplicateValues(String json) {
Gson gson = new Gson();
JsonElement element = gson.fromJson(json, JsonElement.class);
if (element.isJsonObject()) {
JsonObject jsonObject = element.getAsJsonObject();
removeDuplicateValues(jsonObject);
return gson.toJson(jsonObject);
} else if (element.isJsonArray()) {
JsonArray jsonArray = element.getAsJsonArray();
removeDuplicateValues(jsonArray);
return gson.toJson(jsonArray);
}
return json;
}
private static void removeDuplicateValues(JsonArray jsonArray) {
Set<JsonElement> uniqueElements = new HashSet<>();
Iterator<JsonElement> iterator = jsonArray.iterator();
while (iterator.hasNext()) {
JsonElement element = iterator.next();
if (!uniqueElements.add(element)) {
iterator.remove();
}
}
for (JsonElement element : uniqueElements) {
if (element.isJsonObject()) {
removeDuplicateValues(element.getAsJsonObject());
} else if (element.isJsonArray()) {
removeDuplicateValues(element.getAsJsonArray());
}
}
}
private static void removeDuplicateValues(JsonObject jsonObject) {
for (Map.Entry<String, JsonElement> entry : jsonObject.entrySet()) {
JsonElement element = entry.getValue();
if (element.isJsonObject()) {
removeDuplicateValues(element.getAsJsonObject());
} else if (element.isJsonArray()) {
removeDuplicateValues(element.getAsJsonArray());
}
}
}
위의 코드를 사용하면 입력으로 주어진 JSON 데이터에서 중복값이 제거된 JSON 데이터를 반환할 수 있습니다.
3. 사용 예제
다음은 위에서 구현한 코드를 사용하는 예제입니다:
public static void main(String[] args) {
String json = "{\"items\":[{\"id\":1,\"name\":\"Apple\"},{\"id\":2,\"name\":\"Banana\"},{\"id\":1,\"name\":\"Apple\"}]}";
String result = removeDuplicateValues(json);
System.out.println(result);
}
위의 예제를 실행하면, 중복된 아이템이 제거된 JSON 데이터가 출력됩니다:
{"items":[{"id":1,"name":"Apple"},{"id":2,"name":"Banana"}]}
참고 자료
- Gson 라이브러리: https://github.com/google/gson