Gson - Java Object, JSON Object 변환

JS · 12 Sep 2020

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}

참고

댓글을 보거나 쓰려면 이 버튼을 눌러주세요.
codechachaCopyright ©2019 codechacha