seong

공공데이터 다루기 (JSON) 본문

자바/자바 실습

공공데이터 다루기 (JSON)

hyeonseong 2022. 8. 23. 23:23

Json 데이터를 자바에서 주고 받기 위해 Gson 라이브러리 설치

1.  많이 다운로드 된 버전 선택

https://mvnrepository.com/artifact/com.google.code.gson/gson/2.8.5

 

2. 프로젝트 라이브러리로 등록


공공데이터 JAVA와 통신

1. 공공데이터 홈페이지 로그인 -> 마이페이지

 

2. 데이터  활용 신청

 

3. 조회 서비스 클릭 후 아래 "초단기실황조회"사용 

ServiceKey   위쪽 일반 인증키를 복사해서 넣기
dataType  Json
base_date 원하는 날짜
dast_time  원하는 시간
nx , ny  현재 위치를 나타내는 값 (확인은 문서를 확인 해야한다.)

 

미리보기를 클릭하면 아래와 같은 JSON 데이터가 나온다

 

4. 주소를 복사해서 자바에 넣어주기

데이터들을 읽기 위해 버퍼리더에 모두 담아준다.

 

5. 데이터 확인

BufferReader 로 읽은 데이터들을 temp에 담아준다.

temp에 담긴 데이터들을 StringBuilder를 이용해 출력

버퍼에 남아 있는 데이터가 null이 될 때 까지  출력


Dto를 만들어주고 원하는 데이터 가져오기

1. Json 온라인 뷰어를 통해 타입들을 모두 확인

 

2. 복사한 값들을 모두 넣고 Viewer 클릭

 

그럼 아래 처럼 타입과 생김새들이 보인다. 이것을 통해 자바 오브젝트로 변환해 주면된다.

 

3. 자바 오브젝트로 변환하기

만들때 주의할 점 : 데이터의 타입, 이름이 동일해야 한다.

Response를 모두 담을 RespDto

 

Response

 

Header

 

Body

 

Items

 

Item

 

4. 원하는 데이터 찾아서 출력

작성 순서

1. Gson 객체 생성

2. RespDto를 생성 -> fromJson속성을 이용해 JSON데이터를 자바가 읽을 수 있게 변환.

3. 원하는 데이터를 찾아 변수에 저장.

4. 변수 출력


<소스코드>

package json01;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

import com.google.gson.Gson;

public class jsonEx01 {

	public static void main(String[] args) {
		try {
			URL url = new URL(
					"http://apis.data.go.kr/1360000/VilageFcstInfoService_2.0/getUltraSrtNcst?serviceKey=nLjOIPFq0S5WXz%2BJEJOnXftVEU90nnb3JokthTLMS10R8IeMJo017%2FAhcW7p92jLcUOhEv2MS8lMlHHPhmwaBw%3D%3D&pageNo=1&numOfRows=1000&dataType=json&base_date=20220823&base_time=2129&nx=55&ny=127");
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));

			StringBuilder sb = new StringBuilder();
			String temp = "";
			while ((temp = br.readLine()) != null) {
				sb.append(temp);
			}
			
			Gson gson = new Gson();
			RespDto respDto = gson.fromJson(sb.toString(), RespDto.class);
			String temperature = respDto.getResponse().getBody().getItems().getItem().get(3).getObsrValue();

			System.out.println(temperature);
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}