본문 바로가기
Tech/Java

[JAVA] 외부 라이브러리를 쓰지 않고 Json 파싱하기(ScriptEngine)

by 소라소라잉 2020. 3. 17.

외부 라이브러리 없이 Json을 파싱하는 법을 알아보겠습니다.

먼저, 연습용 Json객체를 받아올 수 있는 웹 사이트를 하나 소개하겠습니다. 

 

https://swapi.dev/

 

스타워즈에 등장하는 인물정보를 받아올 수 있는 API입니다.

사이트에 들어가서 이런식으로 테스트를 해볼 수도 있습니다.

 

 

HttpURLConnection을 이용하여 응답을 받아오는 코드입니다. 

URL은 "https://swapi.dev/api/people/1/" 로 Luke Skywalker의 정보를 받아오겠습니다. 

 

	URL url = new URL("https://swapi.dev/api/people/1/");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        conn.setRequestProperty("User-Agent", "Mozilla/5.0");
        conn.setRequestProperty("Accept", "application/json");
        conn.setDoInput(true);
        
        // 상태코드 
        // int responseCode = conn.getResponseCode();
        
        BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String inputLine;
        StringBuffer response = new StringBuffer();
        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        
        in.close();

 

받아온 response를 ScriptEngine을 이용해 파싱해보겠습니다.

Json으로 받아온 문자열을 ScriptEngine이 Map객체에 매핑해 줍니다. 

 

	// scriptengin을 이용하여 Json 파싱하기 
        ScriptEngineManager sem = new ScriptEngineManager();
        ScriptEngine engine = sem.getEngineByName("javascript");

        String json = response.toString();
        String script = "Java.asJSONCompatible(" + json + ")";
        Object result = engine.eval(script);
        Map contents = (Map)result;
        contents.forEach((k, v) -> { System.out.println(k.toString()+":"+v.toString());});

 

Map객체 contents에 response로 받은 Json객체가 key-value형식으로 담기게 됩니다. 

위이 10번째 라인에 key-value를 그대로 출력하였으나, 저 부분에 가져온 Json을 이용해 원하는 작업을 할 수 있습니다.

 

 

* reference : http://www.adam-bien.com/roller/abien/entry/converting_json_to_map_with

댓글