코딩/JAVA

[JAVA] 라이브러리를 사용하여 JSON 데이터 만들기 (ft. gson)

밤유리 2022. 11. 23. 00:35
반응형

Java에서 JSON 데이터를 읽거나 만들 수 있도록 지원하는 라이브러리가 몇 가지 있는 있는데 오늘은 gson을 사용해서 공부하려고 한다.

 

 

 

 


 

 

 

Depdendency
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.5</version>
</dependency>

 

 

 

JsonObject 사용하기

먼저, JsonObject 객체를 선언한 뒤 addProperty 함수를 사용하여, 그 안에 넣을 필드와 값을 입력해 준다.

Gson 객체를 생성하는 방법은 new Gson()과 new GsonBuilder.create() 이렇게 2 가지가 있는데, setPrettyPrinting를 추가해 주면 함수명에서도 알 수 있듯 콘솔에 예쁘게(?) 출력할 수 있도록 해준다.

 

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;


// JSON 객체 선언
JsonObject jsonObject = new JsonObject();

// 필드와 값 입력
jsonObject.addProperty("이름", "고길동");
jsonObject.addProperty("나이", "45");

// JSON 예쁘게 출력
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String strJson = gson.toJson(jsonObject);

// 콘솔 출력
System.out.println(strJson);

 

화면을 출력해 보면 다음과 같이 콘솔에서도 JSON 형식으로 출력되는 것을 볼 수 있다.

{
  "이름": "고길동",
  "나이": "45"
}

 

 

 

JsonObject, JsonArray 사용

이번에는 카타르 월드컵에 대한 정보를 이용하여 JSON 데이터를 만들어 보는 코드를 작성하였다.

A~H 조에 들어가 있는 팀들의 이름을 입력하고, Map의 KEY 값을 정렬하기 위해 TreeMap을 사용하였다.

 

import java.util.Map;
import java.util.TreeMap;

// KEY 정렬을 위해서 TreeMap 사용
Map<String, String[]> map = new TreeMap<>();
map.put("A조", new String[]{"카타르", "에콰도르", "세네갈", "네덜란드"});
map.put("B조", new String[]{"잉글랜드", "이란", "미국", "웨일즈"});
map.put("C조", new String[]{"아르헨티나", "사우디", "멕시코", "폴란드"});
map.put("D조", new String[]{"프랑스", "호주", "덴마크", "튀니지"});
map.put("E조", new String[]{"스페인", "코스타리카", "독일", "일본"});
map.put("F조", new String[]{"벨기에", "캐나다", "모로코", "크로아티아"});
map.put("G조", new String[]{"브라질", "세르비아", "스위스", "카메룬"});
map.put("H조", new String[]{"포루투갈", "가나", "우루과이", "대한민국"});

 

 

상위 JsonObject를 worldCup, 그 안에 편성된 조의 정보의 하위 JsonObject를 groups라고 선언한다.

A~H 조의 정보를 넣을 JsonArray를 group이라고 선언하고, 하나의 조 정보를 teams에 넣어준다.

편성된 조의 모든 정보가 들어간 groups를 worldCup에 넣어주고 출력해 준다.

 

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;

// 월드컵 JSON 객체 선언
JsonObject worldCup = new JsonObject();
// 정보 추가
worldCup.addProperty("개최국", "카타르");
worldCup.addProperty("개최기간", "11월 20일 ~ 12월 18일");


// 조 편성 JSON 객체 선언
JsonObject groups = new JsonObject();

for (String key : map.keySet()) {
    // 하나의 조 Array
    JsonArray group = new JsonArray();
    // 4개의 팀
    String[] teams = map.get(key);
    // Array 에 추가
    for (int idx=0; idx < teams.length; idx++) {
        group.add(teams[idx]);
    }
    // 조 편성에 추가
    groups.add(key, group);
}

// 조편성 정보 추가
worldCup.add("조편성", groups);


// JSON 예쁘게 출력
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String str = gson.toJson(worldCup);


// 콘솔 출력
System.out.println(str);

 

출력한 내용을 콘솔에서 확인해보면 각 조의 값들은 배열로 출력되는 것을 확인할 수 있다.

{
  "개최국": "카타르",
  "개최기간": "11월 20일 ~ 12월 18일",
  "조편성": {
    "A조": [
      "카타르",
      "에콰도르",
      "세네갈",
      "네덜란드"
    ],
    "B조": [
      "잉글랜드",
      "이란",
      "미국",
      "웨일즈"
    ],
    "C조": [
      "아르헨티나",
      "사우디",
      "멕시코",
      "폴란드"
    ],
    "D조": [
      "프랑스",
      "호주",
      "덴마크",
      "튀니지"
    ],
    "E조": [
      "스페인",
      "코스타리카",
      "독일",
      "일본"
    ],
    "F조": [
      "벨기에",
      "캐나다",
      "모로코",
      "크로아티아"
    ],
    "G조": [
      "브라질",
      "세르비아",
      "스위스",
      "카메룬"
    ],
    "H조": [
      "포루투갈",
      "가나",
      "우루과이",
      "대한민국"
    ]
  }
}

 

 

 

이상, 오늘도 밤톨만큼 코딩했다.

 

 


참조
반응형