Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

[Server] return 값 분석 본문

Project/대중교통 길찾기

[Server] return 값 분석

Seung__ 2022. 1. 20. 23:16

1. 도시내 길찾기 출력 데이터


번호 요소 데이터 타입 필수값 출력 개수 설명
1 result 확장노드 Y 1 데이터를 포함하는 최 상위 노드
1-1 searchType int Y 1 결과 구분 (도시내 or 도시간 직통 or 도시간 환승)
0-도시내, 1-도시간 직통, 2-도시간 환승
1-2 outTrafficCheck int Y 1 도시간 "직통" 탐색 결과 유무(환승 X)
0-False, 1-True
1-3 busCount int Y 1 버스 결과 개수
1-4 subwayCount int Y 1 지하철 결과 개수
1-5 subwayBusCount int Y 1 “버스+지하철” 결과 개수
1-6 pointDistance double Y 1 출발지(SX, SY)와 도착지(EX, EY)의 직선 거리 (미터)
1-7 startRadius int Y 1 출발지 반경
1-8 endRadius int Y 1 도착지 반경
 
1-9 path 확장노드 Y 1...n 결과 리스트 확장 노드
1-9-1 pathType int Y 1 결과 종류
1-지하철, 2-버스, 3-버스+지하철
1-9-2 info 확장노드 Y 1 요약 정보 확장 노드
1-9-2-1 trafficDistance double Y 1 도보를 제외한 총 이동 거리
1-9-2-2 totalWalk int Y 1 총 도보 이동 거리
1-9-2-3 totalTime int Y 1 총 소요시간
1-9-2-4 payment int Y 1 총 요금
1-9-2-5 busTransitCount int Y 1 버스 환승 카운트
1-9-2-6 subwayTransitCount int Y 1 지하철 환승 카운트
1-9-2-7 mapObj string Y 1 보간점 API를 호출하기 위한 파라미터 값
1-9-2-8 firstStartStation string Y 1 최초 출발역/정류장
1-9-2-9 lastEndStation string Y 1 최종 도착역/정류장
1-9-2-10 totalStationCount int Y 1 총 정류장 합
1-9-2-11 busStationCount int Y 1 버스 정류장 합
1-9-2-12 subwayStationCount int Y 1 지하철 정류장 합
1-9-2-13 totalDistance double Y 1 총 거리
1-9-3 subPath 확장노드 Y 1...n 이동 교통 수단 정보 확장 노드
1-9-3-1 trafficType int Y 1 이동 수단 종류 (도보, 버스, 지하철)
1-지하철, 2-버스, 3-도보
1-9-3-2 distance double Y 1 이동 거리
1-9-3-3 sectionTime int Y 1 이동 소요 시간
1-9-3-4 stationCount int Y/N 1 이동하여 정차하는 정거장 수(지하철, 버스 경우만 필수)
1-9-3-5 lane 확장노드 Y/N 1...n 교통 수단 정보 확장 노드
1-9-3-5-1 name string Y/N 1 지하철 노선명 (지하철인 경우에만 필수)
1-9-3-5-2 busNo string Y/N 1 버스 번호 (버스인 경우에만 필수)
1-9-3-5-3 type int Y/N 1 버스 타입 (버스인 경우에만 필수,최하단 참조)
1-9-3-5-4 busID int Y/N 1 버스 코드 (버스인 경우에만 필수)
1-9-3-5-5 subwayCode int Y/N 1 지하철 노선 번호 (지하철인 경우에만 필수)
1-9-3-5-6 subwayCityCode int Y/N 1 지하철 도시코드 (지하철인 경우에만 필수)
1-9-3-6 startName string Y 1 승차 정류장/역명
1-9-3-7 startX double Y 1 승차 정류장/역 X 좌표
1-9-3-8 startY double Y 1 승차 정류장/역 Y 좌표
1-9-3-9 endName string Y 1 하차 정류장/역명
1-9-3-10 endX double Y 1 하차 정류장/역 X 좌표
1-9-3-11 endY double Y 1 하차 정류장/역 Y 좌표
1-9-3-12 way string Y/N 1 방면 정보 (지하철인 경우에만 필수)
1-9-3-13 wayCode int Y/N 1 방면 정보 코드(지하철의 첫번째 경로에만 필수)
1 : 상행, 2: 하행
1-9-3-14 door string Y/N 1 지하철 빠른 환승 위치 (지하철인 경우에만 필수)
1-9-3-15 startID int Y 1 출발 정류장/역 코드
1-9-3-16 endID int Y 1 도착 정류장/역 코드
1-9-3-17 startExitNo string N 1 지하철 들어가는 출구 번호
(지하철인 경우에만 사용되지만 해당 태그가 없을 수도 있다.)
1-9-3-18 startExitX double N 1 지하철 들어가는 출구 X좌표(지하철인 경우에 만 사용되지만 해당 태그가 없을 수도 있다.)
1-9-3-19 startExitY double N 1 지하철 들어가는 출구 Y좌표(지하철인 경우에 만 사용되지만 해당 태그가 없을 수도 있다.)
1-9-3-20 endExitNo string N 1 지하철 나가는 출구 번호(지하철인 경우에만 사용되지만 해당 태그가 없을 수도 있다.)
1-9-3-21 endExitX double N 1 지하철 나가는 출구 X좌표(지하철인 경우에만 사용되지만 해당 태그가 없을 수도 있다.)
1-9-3-22 endExitY double N 1 지하철 나가는 출구 Y좌표(지하철인 경우에만 사용되지만 해당 태그가 없을 수도 있다.)
1-9-3-23 passStopList 확장노드 Y 1 경로 상세구간 정보 확장 노드(국문에 한하여 제공)
1-9-3-23-1 stations 확장노드 Y 1...n 정류장 정보 그룹노드
1-9-3-23-1-1 index int Y 1 정류장 순번
1-9-3-23-1-2 stationID int Y 1 정류장 ID
1-9-3-23-1-3 stationName string Y 1 정류장 명칭
1-9-3-23-1-4 x string Y 1 정류장 X좌표
1-9-3-23-1-5 y string Y 1 정류장 Y좌표
1-9-3-23-1-6 isNonStop string Y/N 1 미정차 정류장 여부 Y/N(버스인 경우에만 필수)

 

 

2. 예시


{
"result":{
  "path":[{
       "pathType":1,
       "subPath":[{
         "trafficType":1,
         "distance":2000,
         "sectionTime":9,
         "lane":{
           "name":"수도권 2호선",
           "subwaycode":2,
           "subwayCityCode":1000
             },
           "stationCount":1,
           "passStopList":{
           "stations":[{
             "index":0,
             "stationName":"당산",
             "stationID":237,
             "x":126.902682,
             "y":37.534863
             },
             {
             "index":1,
             "stationName":"합정",
             "stationID":238,
             "x":126.914543,
             "y":37.549942
             }]
          },
      "way":"합정",
      "wayCode":2,
      "startX":126.90267725576584,
      "startY":37.534862332279936,
      "startID":237,
      "startName":"당산",
      "endExitNo":"",
      "endExitX":0.0,
      "endExitY":0.0,
      "endX":126.91454311097073,
      "endY":37.549938143345756,
      "endID":238,
      "endName":"합정"
    },
    …(중략)...
    ],
      "info":{
      "mapObj":"2:2:237:238",
      "payment":1250,
      "busTransitCount":0,
      "subwayTransitCount":1,
      "busStationCount":0,
      "subwayStationCount":1,
      "totalStationCount":1,
      "totalTime":9,
      "totalWalk":0,
      "trafficDistance":2000,
      "totalDistance":2000,
      "firstStartStation":"당산",
      "lastEndStation":"합정",
      "totalWalkTime":-1
    }
    }],
    "searchType":0,
    "startRadius":700,
    "endRadius":700,
    "subwayCount":1,
    "busCount":10,
    "subwayBusCount":0,
    "pointDistance":1967,
    "outTrafficCheck":0
  }
}
      

return된 json구조는 대략 다음과 같다.

 

 

 

3. JOSN파싱


Json라이브러리를 사용하면 쉽게 파싱할 수 있다.

implementation 'org.json:json:20190722'
SearchRouteReq searchRouteReq = new SearchRouteReq(SX, SY, EX, EY);
String result = odSayClient.searchRoute(searchRouteReq);
JSONObject jsonResult = new JSONObject(result);

JsonObject, JsonArray를 사용할 수 있다.

 

3.  DTO

Json 데이터를 객체로 변환하자. 

계층 구조에 따라 class를 만들어 줬다.

@Getter
@AllArgsConstructor
@NoArgsConstructor
public class SearchRouteRes {

    private JSONObject result;
    private int searchType;
    private int outTrafficCheck;
    private int busCount;
    private int subwayCount;
    private int subwayBusCount;
    private int pointDistance; //왜 double로안들어옴?
    private int startRadius;
    private int endRadius;
    private ArrayList<Path> pathList;
    private JSONObject path;

    public SearchRouteRes(JSONObject jsonResult) {
        this.result = jsonResult.getJSONObject("result");
        this.searchType = (int) result.get("searchType");
        this.outTrafficCheck = (int) result.get("outTrafficCheck");
        this.busCount = (int) result.get("busCount");
        this.subwayBusCount = (int) result.get("subwayBusCount");
        this.subwayCount = (int) result.get("subwayCount");
        this.pointDistance = (int) result.get("pointDistance");
        this.startRadius = (int) result.get("startRadius");
        this.endRadius = (int) result.get("endRadius");
        JSONArray path = result.getJSONArray("path");
        pathList = new ArrayList<>();
        for (int i=0; i<path.length(); i++){
            JSONObject eachPath= (JSONObject) path.get(i);
            pathList.add(new Path(eachPath));
        }
    }
}
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class Path {

    private int pathType;

    private JSONObject info;
    private double trafficDistance;
    private int totalWalk;
    private int totalTime;
    private int payment;
    private int busTransitCount;
    private int subwayTransitCount;
    private String mapObj;
    private String firstStartStation;
    private String lastEndStation;
    private int totalStationCount;
    private int busStationCount;
    private int subwayStationCount;
    private double totalDistance;
    private int totalWalkTime;

    private ArrayList<SubPath> subPathList = new ArrayList<>();
    private JSONObject subPath;

    public Path(JSONObject path) {
        this.pathType = (int) path.get("pathType");

        this.info = (JSONObject) path.get("info");
        this.trafficDistance = (double) info.get("trafficDistance");
        this.totalWalk = (int) info.get("totalWalk");
        this.totalTime = (int) info.get("totalTime");
        this.payment = (int) info.get("payment");
        this.busTransitCount = (int) info.get("busTransitCount");
        this.subwayTransitCount = (int) info.get("subwayTransitCount");
        this.mapObj = (String) info.get("mapObj");
        this.firstStartStation = (String) info.get("firstStartStation");
        this.lastEndStation = (String) info.get("lastEndStation");
        this.totalStationCount = (int) info.get("totalStationCount");
        this.busStationCount = (int) info.get("busStationCount");
        this.subwayStationCount = (int) info.get("subwayStationCount");
        this.totalDistance = (double) info.get("totalDistance");
        this.totalWalk = (int) info.get("totalWalk");

        JSONArray subPath = path.getJSONArray("subPath");
        for (int i=0; i<subPath.length(); i++){
            JSONObject eachSubPath = (JSONObject) subPath.get(i);
            subPathList.add(new SubPath(eachSubPath, i));
        }


    }
}
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class SubPath {

    //필수값 trafficType = 3 도보
    private int trafficType;
    private int distance;    //왜 double로 안들어옴?    
    private int sectionTime;

    //버스, 지하철 타는 경우
    //trafficType = 1 -> 지하철
    //trafficType = 2 -> 버스
    private int stationCount;
    private JSONArray laneJasonArray;
    private JSONObject laneJson;
    private Lane lane;
    private String startName;
    private double startX;
    private double startY;
    private String endName;
    private double endX;
    private double endY;

    private String way;
    private int wayCode;
    private String door;

    private int startID;
    private int endID;
    private JSONObject passStopList;
    private ArrayList<Station> stations;

    public SubPath(JSONObject eachSubPath, int index) {
        this.trafficType = (int) eachSubPath.get("trafficType");
        this.distance = (int) eachSubPath.get("distance");  //왜 double로 안들어옴?
        this.sectionTime = (int) eachSubPath.get("sectionTime");

        if (trafficType != 3){
            this.stationCount = (int) eachSubPath.get("stationCount");
            this.laneJasonArray = eachSubPath.getJSONArray("lane");
            this.laneJson= (JSONObject) laneJasonArray.get(0);
            this.lane= new Lane(laneJson, trafficType);
            this.startName = (String) eachSubPath.get("startName");
            this.startX = (double) eachSubPath.get("startX");
            this.startY = (double) eachSubPath.get("startY");
            this.endName = (String) eachSubPath.get("endName");
            this.endX = (double) eachSubPath.get("endX");
            this.endY = (double) eachSubPath.get("endY");

            if (trafficType == 1){
                //지하철의 경우에만
                this.way = (String) eachSubPath.get("way");
                if (index==0){
                    //지하철 첫 번 째 경로에만.
                    this.wayCode = (int) eachSubPath.get("wayCode");
                }
                this.door = (String) eachSubPath.get("door");
            }

            this.startID = (int) eachSubPath.get("startID");
            this.endID = (int) eachSubPath.get("endID");

            this.passStopList = eachSubPath.getJSONObject("passStopList");
            JSONArray stationList = passStopList.getJSONArray("stations");
            stations = new ArrayList<>();
            for (int i=0; i<stationList.length(); i++){
                JSONObject stationJson = (JSONObject) stationList.get(i);
                stations.add(new Station(stationJson, trafficType));
            }

        }
    }

    @Getter
    public static class Lane{
        private String name;
        private String busNo;
        private int type;
        private int busID;
        private int subwayCode;
        private int subwayCityCode;


        public Lane(JSONObject laneJson, int trafficType) {
            if (trafficType == 1){
                //지하철
                this.name = (String) laneJson.get("name");
                this.subwayCode = (int) laneJson.get("subwayCode");
                this.subwayCityCode = (int) laneJson.get("subwayCityCode");
            }else if (trafficType == 2){
                //버스
                this.busNo = (String) laneJson.get("busNo");
                this.type = (int) laneJson.get("type");
                this.busID = (int) laneJson.get("busID");
            }


        }
    }

    public static class Station{

        private int index;
        private String stationName;
        private String x;
        private String y;
        private String isNonStop;

        public Station(JSONObject stationJson, int trafficType) {
            this.index = (int) stationJson.get("index");
            this.stationName = (String) stationJson.get("stationName");
            this.x = (String) stationJson.get("x");
            this.y = (String) stationJson.get("y");

            if (trafficType == 2){
                this.isNonStop = (String) stationJson.get("isNonStop");
            }

        }
    }
}

 

 

4. GitHiub: 220120 JsonParsing.


 

GitHub - bsh6463/commuteMap

Contribute to bsh6463/commuteMap development by creating an account on GitHub.

github.com

 

'Project > 대중교통 길찾기' 카테고리의 다른 글

프론트 개발2  (0) 2022.01.22
간단한 프론트 개발  (0) 2022.01.20
[Server] Odsay API호출 문제 해결  (0) 2022.01.18
[Server] Odsay 대중교통 api 연동  (0) 2022.01.17
[Server] 회원 도메인 개발  (0) 2022.01.15
Comments