공공데이터 다운로드
JsonVo
package json;
public class FoodVo {
private String label;
private String price;
private String area;
private String routeName;
private String direction;
public FoodVo () {
}
public FoodVo(String label, String price, String area, String routeName, String direction) {
super();
this.label = label;
this.price = price;
this.area = area;
this.routeName = routeName;
this.direction = direction;
}
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public String getArea() {
return area;
}
public void setArea(String area) {
this.area = area;
}
public String getRouteName() {
return routeName;
}
public void setRouteName(String routeName) {
this.routeName = routeName;
}
public String getDirection() {
return direction;
}
public void setDirection(String direction) {
this.direction = direction;
}
@Override
public String toString() {
return "FoodVo [label=" + label + ", price=" + price + ", area=" + area + ", routeName=" + routeName
+ ", direction=" + direction + "]";
}
}
JSON 파일 형식
JSON 파일은 다음과 같은 형식으로 되어있다.
type위의 링크를 이용해야한다.
label Price area route direction |
- String path를 해당 파일 경로로 옮긴다.
- FileReader을 만든다.
- Parse를 하기 위해 JSONParser을 생성한다. (JSONParser)
- Json 파일의 가장 끝 괄호는 { } 이다. 즉, 객체이다. (JSONObject)
- Iterator 반복자로 obj의 key값을 순차적으로 불러내고 접근하기 위해 생성하였다. (Iterator)
- ArrayList 는 나온 여러 값들을 저장하기 위해 list에 하나씩 값을 넣는다.
- while문을 돌려 값이 있는 동안 key를 하나씩 옮기고, 키 값을 꺼내고, 각자의 값을 꺼낸다.
- o.get 뒤의 경로에는 파일에 있는 링크를 적어준다.
- 각각 배열을 생성해주고 값을 받아 변수(label, price ...) 에 담아준다.
- 결과적으로 나온 FoodVo를 list에 담아준다.
- 나온 list 결과를 담아 jsp에 보내준다.
package handler;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import json.FoodVo;
public class JsonHandler implements Handler {
@Override
public String process(HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
String path = request.getServletContext().getRealPath("WEB-INF/files/serviceAreaFoods.json");
try {
FileReader fr = new FileReader(path);
JSONParser parser = new JSONParser();
JSONObject obj = (JSONObject) parser.parse(fr); //= json.parse(txt);//json파싱 객체 반환
Iterator iter = obj.keySet().iterator();
ArrayList<FoodVo> list = new ArrayList<>();
while(iter.hasNext()) {
String key = (String) iter.next();
//음식 개체 하나 꺼냄
//키만 골라냄
JSONObject o = (JSONObject) obj.get(key);
//키에 배치되어 있는 종류
//음식명 추출
JSONArray arr1 = (JSONArray) o.get("http://www.w3.org/2000/01/rdf-schema#label");
JSONObject jsonlabel = (JSONObject) arr1.get(0);
String label = (String) jsonlabel.get("value");
//가격 추출
JSONArray arr2 = (JSONArray) o.get("http://data.ex.co.kr:80/link/def/salePrice");
JSONObject jsonprice = (JSONObject) arr2.get(0);
String price = (String) jsonprice.get("value");
//serviceAreaName 서비스 지역명
JSONArray arr3 = (JSONArray) o.get("http://data.ex.co.kr:80/link/def/serviceAreaName");
JSONObject jsonarea = (JSONObject) arr3.get(0);
String area = (String) jsonarea.get("value");
// 고속도로명
JSONArray arr4 = (JSONArray) o.get("http://data.ex.co.kr:80/link/def/routeName");
JSONObject jsonroute = (JSONObject) arr4.get(0);
String route = (String) jsonroute.get("value");
//direction
JSONArray arr5 = (JSONArray) o.get("http://data.ex.co.kr:80/link/def/direction");
JSONObject jsondirection = (JSONObject) arr5.get(0);
String direction = (String) jsondirection.get("value");
list.add(new FoodVo(label, price, area, route, direction));
}
request.setAttribute("list", list);
System.out.println(list);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "/json/list.jsp";
}
}
list.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>고속도로 휴게소 지역 음식 리스트</h3>
<table border="1">
<tr><th>음식명</th><th>가격</th><th>지역명</th><th>고속도로명</th><th>방향</th></tr>
<c:forEach var="vo" items="${list }">
<tr>
<td>${vo.label }</td><td>${vo.price }</td><td>${vo.area }</td><td>${vo.routeName }</td><td>${vo.direction }</td>
</tr>
</c:forEach>
</table>
</body>
</html>