반응형
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조": [
"포루투갈",
"가나",
"우루과이",
"대한민국"
]
}
}
이상, 오늘도 밤톨만큼 코딩했다.
참조
반응형
'코딩 > JAVA' 카테고리의 다른 글
[JAVA] replaceAll을 사용해서 특정 문자들을 지우기 (0) | 2022.11.29 |
---|---|
[JAVA] String index out of range 에러 발생하는 이유 (0) | 2022.11.27 |
[JAVA] renameTo와 move 함수를 사용하여 파일 이름 변경 및 이동하는 방법 (0) | 2022.11.21 |
[JAVA] 문자열을 split 함수를 사용해서 특정 구분자로 나눠보자 (0) | 2022.11.19 |
[JAVA] SimpleDateFormat 오전, 오후 포함 문자열 날짜 형식 변경 (0) | 2022.11.05 |