본문 바로가기

프로그래밍/Java

19.12.28) Java - Json & Gson

목차

  • 객체를 표현하는 3가지 방법
  • Gson API로 JSON 다루기

핵심

  • Json으로 데이터 정보를 편리하게 주고 받을 수 있다.

객체를 표현하는 3가지 방법

서로 다른 프로그램끼리 객체를 주고 받을 땐 문자열 형태로 주고 받는 것이 편하다. 왜냐하면 문자열은 각 언어 별 형태가 거의 비슷하기 때문이다. "" or '' 문자열 데이터를 주고 받는 형식은 크게 3가지가 있다.

1. 의미는 없고 구분은 되어 있는 경우

String textMember = "홍길동,광주,010-1111-1111#나길동,서울,010-3212-3213"

데이터 표현은 단순하지만, 의미가 명확하지 않다. 우리는 사람이기 때문에 저 데이터가 어떤 기준으로 나뉘어졌는지 알 수 있지만, 컴퓨터는 정확히 파악하기 어렵다. 또한, 데이터를 분리하는 과정, 전처리 과정이 복잡해지는 단점이 있다.

2. 의미도 있고 구분도 되어 있는 경우 : XML(Extensible Markup Language)

<member>
    <name>홍길동</name>
    <address>광주</address>
    <phone>010-2222-3333</phone>
</member>

확실히 이전 버전보다 의미도 있고 데이터 간 구분도 되어 있다. 태그로 구분되어 있기 때문에 데이터 처리는 쉽다. 하지만 데이터의 크기가 커지는 단점이 있다.

3. 의미도 있고 구분도 되어 있는 경우 : JSON(JavaScript Object Notation)

String jsonMember = "[{"name" : "홍길동", "address" : "광주"}]" +
                    "[{"name" : "나길동", "address" : "서울"}]"

XML보다 간결하다. 하지만 표현이 제한적인 단점이 있다. 하지만 간결함이 가장 큰 무기가 되서 최근엔 다양하게 사용되는 표기법이다.

Gson API로 JSON 다루기

        // Gson으로 객체를 json형식 문자열로 바꾸기
        BookDTO b = new BookDTO("java", 5000, "한빛미디어");
        Gson g = new Gson();
        String json = g.toJson(b);
        System.out.println(json);

        // Gson으로 json을 객체로 바꾸기
        BookDTO book = g.fromJson(json, BookDTO.class);
        System.out.println(book.toString());

        // Gson으로 List를 Json으로 바꾸기
        List<BookDTO> list = new ArrayList<>();
        list.add(new BookDTO("python", 1000, "note"));
        list.add(new BookDTO("c", 10000, "please"));
        String json2 = g.toJson(list);
        System.out.println(json2);

        // Gson을 활용하여 Json을 List로 바꾸기
        List<BookDTO> list2 = g.fromJson(json2, new TypeToken<List<BookDTO>>(){}.getType());
        for (BookDTO v : list2) {
            System.out.println(v);
        }

Json을 List를 바꿀 땐 객체로 바꿀 때보다 복잡하다. 그 이유는 객체는 하나의 자료형이기 때문에 BookDTO.class라고 적으면 된다. 하지만 배열은 속에 객체라는 자료형이 ~~있기 때문에~~ 있어서 총 2개가 된다. 그래서 자바에게 확실하게 알려줘야 한다.

'프로그래밍 > Java' 카테고리의 다른 글

19.12.29) Java - Geocoding(경도, 위도 추출)  (0) 2019.12.29
19.12.28) Java - org.json  (0) 2019.12.29
19.12.27)Java - Wrapper Class  (0) 2019.12.27
19.12.27) Java - ArrayList  (0) 2019.12.27
19.12.26) Java - ObjectList 만들기  (0) 2019.12.26