Legday
[JAVA] JSON->Java Object로 바꿔보기!(Gson 라이브러리사용) 본문
1) 먼저 Gson 라이브러리 다운!
위에 접속후 Gson 검색!

2) 여러 버전이 있지만 가장 최신인 2.9.1 보다 안정적인 2.9.0 버전 다운!

3) jar 파일을 다운 후 본인 워크스페이스 lib폴더에 복사


4) Build Path 설정!
- src 폴더 우클릭후 -> Build Path 클릭 -> Configure Build Path... 클릭

- Libraries -> Classpath 클릭 -> Add Jars... 클릭

- 아까 넣어둔 경로를 클릭후 Apply 클릭하고 창을 끄면 적용된다!

5) Json 문장 분석하기
- 밑의 코드를 잘 보면 계층적으로 이루어져있다
- [] 는 반복되는 ArrayList와 같은 구조이다.
response {
header(resultCode,resultMsg) ,
body{
dataType
items(
[baseDate,
baseTime,
category,
nx,
ny,
obsrValue]
),
pageNo,
numOfRows,
totalCount
}
- 위와 같은 계층구조로 클래스를 먼저 짜준다!(GongEx01,02는 예제코드)
- RespDto 는 아까 만들어둔 클래스들을 이용하기 위한 개체이다.

{
"response": {
"header": {
"resultCode": "00",
"resultMsg": "NORMAL_SERVICE"
},
"body": {
"dataType": "JSON",
"items": {
"item": [
{
"baseDate": "20220822",
"baseTime": "1500",
"category": "PTY",
"nx": 98,
"ny": 75,
"obsrValue": "0"
},
{
"baseDate": "20220822",
"baseTime": "1500",
"category": "REH",
"nx": 98,
"ny": 75,
"obsrValue": "62"
},
{
"baseDate": "20220822",
"baseTime": "1500",
"category": "RN1",
"nx": 98,
"ny": 75,
"obsrValue": "0"
},
{
"baseDate": "20220822",
"baseTime": "1500",
"category": "T1H",
"nx": 98,
"ny": 75,
"obsrValue": "28.2"
},
{
"baseDate": "20220822",
"baseTime": "1500",
"category": "UUU",
"nx": 98,
"ny": 75,
"obsrValue": "-0.9"
},
{
"baseDate": "20220822",
"baseTime": "1500",
"category": "VEC",
"nx": 98,
"ny": 75,
"obsrValue": "140"
},
{
"baseDate": "20220822",
"baseTime": "1500",
"category": "VVV",
"nx": 98,
"ny": 75,
"obsrValue": "1.2"
},
{
"baseDate": "20220822",
"baseTime": "1500",
"category": "WSD",
"nx": 98,
"ny": 75,
"obsrValue": "1.6"
}
]
},
"pageNo": 1,
"numOfRows": 1000,
"totalCount": 8
}
}
}
6) Gson 라이브러리 사용하기!(공공데이터 이용하여 써보기)
- 이 데이터를 가져올 것이다!

- URL 클래스를 이용하여 url 객체에 공공데이터 주소를 저장하고
- http 프로토콜 통신을 위한 conn 객체 생성
- BufferedReader 를 이용하여 공공데이터를 읽어올 것.
- StringBuilder 클래스를 이용하여 데이터를 한줄씩 저장
- gson 객체 생성후 fromJson메서드를 쓸것이다. 첫번째 매개변수는 StringBuilder를 toString하여 바꿔주고
두번째 매개변수는 아까 만들어둔 DTO 클래스를 넣어주면된다.
- 데이터 Parsing 방법은 클래스의 getter를 이용하면 된다.
public static void main(String[] args) {
try {
URL url = new URL("http://apis.data.go.kr/1360000/VilageFcstInfoService_2.0/getUltraSrtNcst?serviceKey=%2FBKGfux%2Bde%2Bi0jFLG%2BmFKccXFkvro4xnwk9SpIptRUr6KXmn7wNn7FJCquD4VzMZKSuR%2BjoNcP9jo%2FxzTJNs9A%3D%3D&pageNo=1&numOfRows=1000&dataType=JSON&base_date=20220822&base_time=1500&nx=98&ny=75");
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
BufferedReader br = new BufferedReader(
new InputStreamReader(conn.getInputStream())
);
StringBuilder sb = new StringBuilder();
String temp = null;
while((temp = br.readLine())!=null) {
sb.append(temp);
}
//json처럼 생긴 String을 RespDto로 변환
Gson gson = new Gson();
RespDto respDto = gson.fromJson(sb.toString(), RespDto.class);
String str = respDto.getResponse().getBody().getItems().getItem().get(3).getObsrValue();
System.out.println(str);
} catch (Exception e) {
e.printStackTrace();
}
}

'Java' 카테고리의 다른 글
| [Java]Http 프로토콜을 이용한 통신(read만) (0) | 2022.08.23 |
|---|---|
| [JAVA] JDBC 연동하기 (0) | 2022.08.23 |
| [Java] 파일 입출력 (0) | 2022.08.22 |
| Buffer를 이용한 통신 (0) | 2022.08.22 |
| String constant pool 이란? (0) | 2022.08.22 |