Language/JAVA
공공데이터 Open API JSON , ObjectMapper
javapp 자바앱
2022. 6. 8. 18:00
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());