spring

json 파싱 (json-simple)

hahihi 2023. 6. 30. 15:25

webClient의 response가 json 형식이어서 처음에는 dto를 만들어서 정보를 다 받자! 고 생각했는데 나에게 필요하지 않은 정보가 대다수여서 String으로 받은 후 json 파서를 이용해 필요한 정보만 저장하기로 했다. (정말 많은 정보가 response로 들어왔는데 필요한 field는 8개 정도였다)

 

Java 진영에서 많이 사용하는 Json 파서는 Jackson, GSON, json-simple 이렇게 3가지가 있는데 빅데이터 환경(Jackson)도 아니고, 마이크로 서비스나 분산 아키텍처 서비스(GSON)도 아니기 때문에 json-simple을 선택했다.

 

build.gradle

	implementation group: 'com.googlecode.json-simple', name:'json-simple', version:'1.1.1'

 

사용

기존의 메서드를 간략화했다.

먼저 JSONParser를 만들고, json을 parse한 jsonObj로 필요한 정보만 파싱하면 된다. 리스트라면 JSONArray를 사용한다.

private List<ResponseOrderDto> parseOrderList(String json){ //필요한 정보만 parsing
        List<ResponseOrderDto> responseList = new ArrayList<>();
        JSONParser parser = new JSONParser();
        try {

            JSONObject jsonObj = (JSONObject) parser.parse(json);
            JSONObject data = (JSONObject) jsonObj.get("data");
            JSONObject OrderItemList = (JSONObject) data.get("order_item_list");
            JSONArray itemList = (JSONArray) partnerOrderItemList.get("item_list");

            for(int i=0;i<itemList.size();i++){
                JSONObject orderInfo = (JSONObject) itemList.get(i);
                JSONObject order = (JSONObject) orderInfo.get("order");
                String orderNumber = (String) order.get("order_number");
            }
        } catch (ParseException e) {
            throw new ParsingException("주문 정보를 받아올 수 없습니다.");
        }
        return responseList;
    }