본문 바로가기
Language/JAVA

공공데이터 Open API JSON , ObjectMapper

by javapp 자바앱 2022. 6. 8.
728x90

json-simple  

https://blog.naver.com/yandul83/220380749175

 

공공데이터 개발노트 - JSON사용 예제, OpenAPI 일별 박스오피스 정보를 가져와보자(Java에서 Json활용

영화진흥위원회의 Open API - 박스오피스 정보JSON으로 제공해주는 정보를Java를 사용하여 파싱해...

blog.naver.com

 


 

 

XML to JSON

https://m.blog.naver.com/yandul83/220432077444

 

공공데이터 개발 - JSON 타입 생성 및 XML을 JSON으로 변환 XML to JSON

JSON 타입 생성 및XML을 JSON으로 변환 시스템간에 연결을 하기 위해서는 서로 대화를 하기 위...

blog.naver.com

 

 

 


 

 

 

ObjectMapper 사용

의존성 설정

<!-- 		ObjectMapper 사용 -->
		<dependency>
		    <groupId>com.fasterxml.jackson.core</groupId>
		    <artifactId>jackson-databind</artifactId>
		    <version>2.11.1</version>
		</dependency>

 

응답 데이터의 구조를 잘 파악해야 됩니다.

HashMap에 키값으로 getRecommendedKr 이 있을 것이고

그 내부에 ["header", item"] 키들이 있을 것입니다..

그래서 get("getRecommendedKr").get("item") 이렇게 접근해야 data 리스트에 배열에 접근할수 있습니다.

 

 

핵심 코드

// json 파싱
ObjectMapper objectMapper = new ObjectMapper();
Map<String, Object> map = new HashMap<>();
map= objectMapper.readValue(sb.toString(),  new TypeReference <Map<String,Object>>(){});

Map<String, Object> getRecommendedKr = (Map<String, Object>) map.get("getRecommendedKr");
List<Map<String, Object>> itemList =  (List<Map<String, Object>>) getRecommendedKr.get("item");

List<RecommenedService> recommenedServices = new ArrayList<>();

 

 

 

public class BusanThemaApiExplorer
{
    String serviceKey= "3D";
    int pageNo = 1;
    int numOfRows=10;
    String resultType="json";
    String UC_SEQ="";

    public void requestAPI()
    {
        try {

            StringBuilder urlBuilder = new StringBuilder("http://apis.data.go.kr/6260000/RecommendedService/getRecommendedKr"); /*URL*/
            urlBuilder.append("?serviceKey="+serviceKey);
            urlBuilder.append("&pageNo=" +pageNo); /*페이지번호*/
            urlBuilder.append("&numOfRows="+numOfRows); /*한 페이지 결과 수*/
            urlBuilder.append("&resultType=" + resultType); /*JSON방식으로 호출 시 파라미터 resultType=json 입력*/
            //urlBuilder.append("&UC_SEQ=" + UC_SEQ); /*콘텐츠 ID*/
            System.out.println(urlBuilder.toString());
            URL url = new URL(urlBuilder.toString());
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setRequestProperty("Content-type", "application/json");
            System.out.println("Response code: " + conn.getResponseCode());
            BufferedReader rd=null;
            if(conn.getResponseCode() >= 200 && conn.getResponseCode() <= 300) {
                rd = new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF-8"));
            } else {
                rd = new BufferedReader(new InputStreamReader(conn.getErrorStream(),"UTF-8"));
            }
            StringBuilder sb = new StringBuilder();
            String line;
            while ((line = rd.readLine()) != null) {
                sb.append(line);
            }

            // json 파싱
            ObjectMapper objectMapper = new ObjectMapper();
            Map<String, Object> map = new HashMap<>();
            map= objectMapper.readValue(sb.toString(),  new TypeReference <Map<String,Object>>(){});

            Map<String, Object> getRecommendedKr = (Map<String, Object>) map.get("getRecommendedKr");
            List<Map<String, Object>> itemList =  (List<Map<String, Object>>) getRecommendedKr.get("item");

            List<RecommenedService> recommenedServices = new ArrayList<>();

            for(Map<String, Object> item :itemList)
            {
                RecommenedService rs= RecommenedService.builder()
                            .uc_seq(item.get("UC_SEQ").toString())
                            .main_title(item.get("MAIN_TITLE").toString())
                            .gugun_nm(item.get("GUGUN_NM").toString())
                            .cate2_nm(item.get("CATE2_NM").toString())
                            .lat(item.get("LAT").toString())
                            .lng(item.get("LNG").toString())
                            .main_place(item.get("MAIN_PLACE").toString())
                            .title(item.get("TITLE").toString())
                            .main_img_normal(item.get("MAIN_IMG_NORMAL").toString())
                            .main_img_thumb(item.get("MAIN_IMG_THUMB").toString())
                            .itemcntnts(item.get("ITEMCNTNTS").toString()).build();
                            recommenedServices.add(rs);
                            System.out.println("test1: "+rs.getMain_title());
            }
            rd.close();
            conn.disconnect();


        } catch (UnsupportedEncodingException | MalformedURLException | ProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } /*Service Key*/ catch (IOException e) {
            System.out.println("IOException");
            e.printStackTrace();
        }

    }
}

 

 

 

System.out.println("test1: "+rs.getMain_title());

결과

 

참고한 사이트

 

 

 

 

 

 

댓글