Legday

[JAVA] JSON->Java Object로 바꿔보기!(Gson 라이브러리사용) 본문

Java

[JAVA] JSON->Java Object로 바꿔보기!(Gson 라이브러리사용)

Legday 2022. 8. 23. 12:29

1) 먼저 Gson 라이브러리 다운!

https://mvnrepository.com/

위에 접속후 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