Gson은 JSON 구조의 객체를 Java 객체로 직렬화(Serialize), 역직렬화(Deserialize)를 도와주는 라이브러리입니다. 즉, JSON 객체를 Java 객체로, 또는 그 반대로 변환해주는 라이브러리입니다.
예제를 보면 이해가 빠릅니다.
Gson 라이브러리 의존성 설정
Gradle 프로젝트의 경우 다음과 같이 build.gradle
에서 의존성을 설정합니다.
dependencies {
implementation 'com.google.code.gson:gson:2.8.6'
}
Maven 프로젝트는 다음과 같이 설정합니다.
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
</dependency>
Gson 라이브러리의 Jar 파일을 직접 다운로드하고 싶다면 maven.org에서 다운로드할 수 있습니다.
Java 객체를 JSON 객체로 변환
다음과 같은 Employee 클래스를 구현하였습니다.
public class Employee {
private long id;
private String name;
private String email;
Employee(long id, String name, String email) {
this.id = id;
this.name = name;
this.email = email;
}
@Override
public String toString() {
return "Employee { id: " + id
+ ", name: "+ name
+ ", email: " + email + " }";
}
}
다음 코드는 Employee 객체를 JSON으로 변환하는 예제입니다. toJson()
에 Java 객체를 인자로 전달하면 JSON으로 변환된 문자열이 리턴됩니다.
Employee employee = new Employee(1234, "Michael", "m1123@google.com");
Gson gson = new Gson();
String jsonString = gson.toJson(employee);
System.out.println(jsonString);
Output:
{"id":1234,"name":"Michael","email":"m1123@google.com"}
JSON 객체를 Java 객체로 변환
JSON 객체를 Java로 변환하는 것도 간단합니다.
다음과 같이 fromJson()
의 인자로 JSON 문자열과 변환할 Java 클래스를 전달하면 됩니다.
String jsonString = "{\"id\":1234,\"name\":\"Michael\",\"email\":\"m1123@google.com\"}";
Gson gson = new Gson();
Employee employee = gson.fromJson(jsonString, Employee.class);
System.out.println(employee);
Output:
Employee { id: 1234, name: Michael, email: m1123@google.com }
읽기 좋은 JSON 객체로 변환
위에서 JSON으로 변환된 문자열들은 Whitespace가 없이 모든 문자열이 붙어있었습니다. 문자열 길이를 최소화하여 데이터 용량이 작다는 장점이 있지만, 디버깅 등의 목적으로 사람이 읽고 이해하기는 어렵습니다.
다음과 같이 GsonBuilder().setPrettyPrinting().create()
으로 PrettyPrinting
이 설정된 Json 객체를 만든다면 읽기 편한 형태의 JSON 문자열로 생성합니다.
Employee employee = new Employee(1234, "Michael", "m1123@google.com");
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String jsonString = gson.toJson(employee);
System.out.println(jsonString);
Ouput:
{
"id": 1234,
"name": "Michael",
"email": "m1123@google.com"
}
결과를 보면 적절한 여백으로 읽기 편한 형태로 JSON 문자열이 리턴되었습니다.
Java List를 JSON으로 변환
toJson()
의 인자로 List를 전달하면 List 구조를 갖고 있는 JSON으로 변환됩니다.
Gson gson = new GsonBuilder().setPrettyPrinting().create();
Employee employee1 = new Employee(1234, "Michael", "m1123@google.com");
Employee employee2 = new Employee(1235, "Blamire", "b5555@google.com");
List<Employee> employees = Arrays.asList(employee1, employee2);
String jsonStirng = gson.toJson(employees);
System.out.println(jsonStirng);
Output:
[
{
"id": 1234,
"name": "Michael",
"email": "m1123@google.com"
},
{
"id": 1235,
"name": "Blamire",
"email": "b5555@google.com"
}
]
JSON을 Java List로 변환
List를 갖고 있는 JSON을 Java List로 변환할 수 있습니다.
다음과 같이 fromJson()
에 JSON 문자열과 변환할 타입을 전달하면 됩니다.
String jsonStirng = "[\n" +
" {\n" +
" \"id\": 1234,\n" +
" \"name\": \"Michael\",\n" +
" \"email\": \"m1123@google.com\"\n" +
" },\n" +
" {\n" +
" \"id\": 1235,\n" +
" \"name\": \"Blamire\",\n" +
" \"email\": \"b5555@google.com\"\n" +
" }\n" +
"]";
Gson gson = new GsonBuilder().setPrettyPrinting().create();
Type listType = new TypeToken<ArrayList<Employee>>(){}.getType();
List<Employee> list = gson.fromJson(jsonStirng, listType);
System.out.println(list);
Output:
[Employee { id: 1234, name: Michael, email: m1123@google.com }, Employee { id: 1235, name: Blamire, email: b5555@google.com }]
JSON을 Java Array로 변환
위에서 사용한 JSON 문자열을 Java의 배열로 변환할 수 있습니다.
다음과 같이 fromJson()
의 타입에 Employee[]
을 입력해주면 됩니다.
String jsonStirng = "[\n" +
" {\n" +
" \"id\": 1234,\n" +
" \"name\": \"Michael\",\n" +
" \"email\": \"m1123@google.com\"\n" +
" },\n" +
" {\n" +
" \"id\": 1235,\n" +
" \"name\": \"Blamire\",\n" +
" \"email\": \"b5555@google.com\"\n" +
" }\n" +
"]";
Gson gson = new GsonBuilder().setPrettyPrinting().create();
Employee[] array = gson.fromJson(jsonStirng, Employee[].class);
System.out.println(Arrays.asList(array));
Output:
[Employee { id: 1234, name: Michael, email: m1123@google.com }, Employee { id: 1235, name: Blamire, email: b5555@google.com }]
Set 객체를 JSON으로, JSON을 Set 객체로 변환
다음은 Java Set 객체를 JSON으로 변환하는 예제입니다.
Set<String> fruits = new HashSet<>();
fruits.add("Apple");
fruits.add("Kiwi");
fruits.add("Orange");
Gson gson = new Gson();
String jsonString = gson.toJson(fruits);
System.out.println(jsonString);
Output:
["Apple","Kiwi","Orange"]
다음은 JSON을 Java Set 객체로 변환하는 예제입니다.
String jsonString = "[\"Apple\",\"Kiwi\",\"Orange\"]";
Gson gson = new Gson();
Type setType = new TypeToken<HashSet<String>>(){}.getType();
Set<String> fruits = gson.fromJson(jsonString, setType);
System.out.println(fruits);
Output:
[Apple, Kiwi, Orange]
Map 객체를 JSON으로, JSON을 Map 객체로 변환
다음은 Java Map 객체를 JSON으로 변환하는 예제입니다.
HashMap<Integer, String> fruitsMap = new HashMap<>();
fruitsMap.put(1, "Apple");
fruitsMap.put(2, "Kiwi");
fruitsMap.put(3, "Orange");
Gson gson = new Gson();
String jsonString = gson.toJson(fruitsMap);
System.out.println(jsonString);
Output:
{"1":"Apple","2":"Kiwi","3":"Orange"}
다음은 JSON을 Java Set 객체로 변환하는 예제입니다.
String jsonString = "[\"Apple\",\"Kiwi\",\"Orange\"]";
Gson gson = new Gson();
Type setType = new TypeToken<HashSet<String>>(){}.getType();
Set<String> fruits = gson.fromJson(jsonString, setType);
System.out.println(fruits);
Output:
{1=Apple, 2=Kiwi, 3=Orange}
참고
Related Posts
- Java - Unsupported class file major version 61 에러
- Java - String.matches()로 문자열 패턴 확인 및 다양한 예제 소개
- Java - 문자열 공백제거 (trim, replace)
- Java - replace()와 replaceAll()의 차이점
- Java - ArrayList 초기화, 4가지 방법
- Java - 배열 정렬(Sorting) (오름차순, 내림차순)
- Java - 문자열(String)을 비교하는 방법 (==, equals, compare)
- Java - StringBuilder 사용 방법, 예제
- Java - 로그 출력, 파일 저장 방법 (Logger 라이브러리)
- Java IllegalArgumentException 의미, 발생 이유
- Java - NullPointerException 원인, 해결 방법
- Seleninum의 ConnectionFailedException: Unable to establish websocket connection 해결
- Java - compareTo(), 객체 크기 비교
- Java - BufferedWriter로 파일 쓰기
- Java - BufferedReader로 파일 읽기
- Java charAt() 함수 알아보기
- Java - BigInteger 범위, 비교, 연산, 형변환
- Java contains()로 문자(대소문자 X) 포함 확인
- Java - Set(HashSet)를 배열로 변환
- Java - 문자열 첫번째 문자, 마지막 문자 확인
- Java - 문자열 한글자씩 자르기
- Java - 문자열 단어 개수 가져오기
- Java - 1초마다 반복 실행
- Java - 배열을 Set(HashSet)로 변환
- Java - 여러 Set(HashSet) 합치기
- Java - 명령행 인자 입력 받기
- Java - 리스트 역순으로 순회, 3가지 방법
- Java - 특정 조건으로 리스트 필터링, 3가지 방법
- Java - HashMap 모든 요소들의 합계, 평균 계산
- Java - 특정 조건으로 HashMap 필터링
- Java - 싱글톤(Singleton) 패턴 구현
- Java - 숫자 왼쪽에 0으로 채우기
- Java - String 배열 초기화 방법
- Java - 정렬된 순서로 Map(HashMap) 순회
- Java - HashMap에서 key, value 가져오기