코드짜는 노인네

[Spring boot] 스프링 부트 Json 파일 읽어오기 본문

spring

[Spring boot] 스프링 부트 Json 파일 읽어오기

ikohong 2022. 9. 6. 15:46
728x90
반응형

[Spring] 스프링 부트 Json 파일 읽어오기


한번씩 json파일을 다운받아 해당 파일안에 들어있는 데이터를 사용해야될 경우가 있습니다. Spring에서 json파일을 불러오고, 특정값을 가지고 오는 방법에 대해 알아보겠습니다.

[
    {
        "news": {
            "title": "서울동부교육지원청, 써큘러스리더와 <b>난독</b>·경계성 학생 지원 업무협약",
            "originallink": "http://www.edupress.kr/news/",
            "link": "http://www.edupress.kr/news/articleView.html",
            "description": "김애경 동부교육장(오른쪽에서 네번째)과 이애진 써큘러스리더 대표(오른쪽에서 다섯번째) 가... ",
            "pubDate": "Thu, 25 Aug 2022 16:10:00 +0900"
        }
    },
    {
        "news": {
            "title": "[고향갑의 <b>난독</b>일기(難讀日記)] 어버이의 나라",
            "originallink": "https://www.kgnews.co.kr/news/article.html",
            "link": "https://www.kgnews.co.kr/news/article.html6",
            "description": "인조반정(仁祖反正)은 쿠데타다. ... ",
            "pubDate": "Mon, 22 Aug 2022 06:02:00 +0900"
        }
    }
]

위의 코드는 Naver 뉴스 API를 활용하여, 만든 json파일 코드입니다. 인제 이 코드를 Spring boot 에서 특정 값을 가지고 오는 코드를 알아보겠습니다.

 

  • build.gradle
dependencies {
	// https://mvnrepository.com/artifact/com.googlecode.json-simple/json-simple
	implementation group: 'com.googlecode.json-simple', name: 'json-simple', version: '1.1.1'
}

일단, build.gradle 에 dependencies를 추가해줘야 합니다. 위의 코트를 추가해준 다음, 아래의 사진과 같이 오른쪽 상단에 버튼이 생성됩니다.

글자는 해당 아이콘위에 마우스를 올려놓으면 볼 수 있습니다. 이 버튼을 누르면, 오른쪽 하단에, 새로운 빌드가 진행되는 모습을 볼 수 있습니다. 이 빌드가 끝날때까지 기다려주세요.

반응형
  • json 파일 읽어오기
import com.fasterxml.jackson.databind.ObjectMapper;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;

import java.io.FileReader;
import java.io.Reader;
import java.util.*;

public void readJson() throws Exception {
    JSONParser parser = new JSONParser();
    // JSON 파일 읽기
    Reader reader = new FileReader("파일 경로");
    JSONArray dateArray = (JSONArray) parser.parse(reader);
    ...
}

 

 

JSONParser 객체를 생성한 다음, Reader를 이용하여, json 파일을 읽어옵니다. 그 다음 코드가 중요한데요. 위의 코드에서는 JSONArray를 사용하였습니다. 이 부분은 json 안의 코드가 어떤방식이냐에 따른 선택인데요.

JSONArray - json 코드가 [ ] 로 감싸고 있을 경우
- List 형식으로 index 값으로 데이터 값을 불러온다.
JSONObject - json 코드가 { } 로 감싸고 있을 경우
- key : value 형식으로 저장되어있는 값을 불러온다.

즉, 위에서 보여드린 json 파일을 보면, [ ] 로 감싸고 있는 모습을 볼 수 있다. 그래서, 'JSONArray'을 선택하였습니다. 만일 코드의 시작이 { } 로 되어있다면, 'JSONObject'를 선택해야됩니다.

...
for (int i = 0; i < dateArray.size(); i++) {
    JSONObject element = (JSONObject) dateArray.get(i);
    JSONObject ObjNews = (JSONObject) element.get("news");
    String ObjTitle = (String) ObjNews.get("title");
    System.out.println("ObjTitle = " + ObjTitle);
}
...

일단, 지금 예시는 리스트 형식으로 구성이 되어있기 때문에, for문을 이용해서 하나하나 값을 가져온 값을 'JSONObject' 안에 넣어준 다음, key 값을 이용해서 'news'의 value값을 가져옵니다. 여기서 value는 'key:value'로 구성이 되어있기에, 한번더 key값을 이용해서 안의 값을 가져옵니다. 단, 'String ObjTitle = (String) ObjNews.,get("title")' 로 코드를 작성해놓은 이요는, 'title'의 value는 더이상 'key:value'로 구성이 되어있지 않기 때문에, 'String'으로 받아옵니다. 그리고 출력을 하면, 해당 데이터가 정상적으로 출력이 됩니다.

 

  • 전체 코드
import com.fasterxml.jackson.databind.ObjectMapper;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;

import java.io.FileReader;
import java.io.Reader;
import java.util.*;

public void readJson() throws Exception {
    JSONParser parser = new JSONParser();
    // JSON 파일 읽기
    Reader reader = new FileReader("파일 경로");
    JSONArray dateArray = (JSONArray) parser.parse(reader);

    for (int i = 0; i < dateArray.size(); i++) {
        JSONObject element = (JSONObject) dateArray.get(i);
        JSONObject ObjNews = (JSONObject) element.get("news");
        String ObjTitle = (String) ObjNews.get("title");
        System.out.println("ObjTitle = " + ObjTitle);
    }
}

위의 코드는 단순히 출력을 해본것이며, 다른 방식으로 로직을 작성하여서 데이터를 활용하시면 됩니다!

728x90
반응형
Comments