Java - Gson API

강서진·2023년 11월 20일
1

Java

목록 보기
26/35
post-custom-banner

강좌 Course 2. Part 3. ch1 1, 2강 요약

JSON / XML 이해하기

JSON: Javascript Object Notation
XML: eXtensible Markup Language

JSON과 XML은 데이터를 표현하고 전송하기 위한 구조화된 데이터 형식이다. 각각의 장단점을 가지고 있어 사용 목적과 상황에 따라 알맞는 형식을 선택하여 사용한다. XML은 태그를 사용하기 때문에 가독성이 낮고 상대적으로 용량이 커서, 최근 웹 및 모바일 애플리케이션에서는 JSON이 더 많이 사용되고 있다.

JSON

JSON은 경량의 데이터 교환 형식으로, 텍스트 기반이며 가독성이 좋고 다양한 프로그래밍 언어와의 호환성으로 널리 쓰인다. json.org
JSON 객체는 중괄호 {}로 묶인 키-값 쌍의 집합으로, 키와 값은 콜론으로 구분되며 여러 개의 키-값 쌍은 쉼표로 구분된다. 배열은 값들의 순서를 가진 리스트로 대괄호 []로 묶인다. 키는 문자열이고, 값은 문자열, 숫자, 불리언, 객체, 배열, null이 올 수 있다.

XML

데이터를 저장하고 전송하기 위한 마크업 언어로, 데이터 트리 구조로 이루어져 있으며, 요소(=태그), 속성, 텍스트, 주석으로 구성된다.

GSON API

자바에서 JSON을 다루는 라이브러리로는 대표적으로 Gson과 Jackson이 있다. 우리는 그 중 Gson을 사용할 것이다!
Gson에서 자바 객체를 JSON으로 변환하려면 toJson()을, JSON을 자바 객체로 변환하려면 fromJson()을 사용하면 된다.

// toJson
public class GsonToJson {
    public static void main(String[] args) {
        Member mvo = new Member("hippo campus",30,"hippo@camp.us");

        // toJson
        Gson gson = new Gson();

        // object -> json
        String json = gson.toJson(mvo);
        System.out.println("json = " + json); // json = {"name":"hippo campus","age":30,"email":"hippo@camp.us"}
    }
}
// fromJson
public class GsonFromJson {
    public static void main(String[] args) {
        String json = "{\"name\":\"coin\",\"age\":10,\"email\":\"coin@the.band\"}";

        Gson gson = new Gson();
        Member m = gson.fromJson(json,Member.class);

        System.out.println(m); // Member{name='coin', age=10, email='coin@the.band'}
    }
}

Json을 객체로 변환할 때, 일치하는 프로퍼티가 없으면 해당 프로퍼티에는 아무것도 저장되지 않는다.

중첩된 Json 구조

먼저 중첩된 클래스가 필요하다.
Address 프로퍼티에 Address 클래스 객체를 받는 Student 클래스를 만들었다. Address와 Student 각각 생성자 메서드, Setter, Getter, toString() 메서드를 가지고 있다.

// toJson()
public class GsonMemAddToJson {
    public static void main(String[] args) {
        Address address = new Address("Seoul", "South Korea");
        Student student = new Student("Tommy", 2, "t0mmy@the.cat", address);

        Gson gson = new Gson();

        String st = gson.toJson(student);
        System.out.println(st); // {"name":"Tommy","age":2,"email":"t0mmy@the.cat","address":{"city":"Seoul","country":"South Korea"}}

    }
}

// fromJson()
public class GsonMemAddFromJson {
    public static void main(String[] args) {
        String json = "{\"name\":\"Tommy\",\"age\":2,\"email\":\"t0mmy@the.cat\","+
                "\"address\":{\"city\":\"Seoul\",\"country\":\"South Korea\"}}";

        Gson gson = new Gson();
        Student student = gson.fromJson(json, Student.class);

        System.out.println(student); // Student{name='Tommy', age=2, email='t0mmy@the.cat', address=Address{city='Seoul', country='South Korea'}}
    }
}
post-custom-banner

0개의 댓글