JSON 파일을 땡겨왔는데 이를 저장하기 위해선 JSON 데이터를 사용하기 위해 JSONObject와 JSONArray를 쓸 수 있습니다. json-simple을 통해 json 객체를 다루는 법을 알아보겠습니다. 본 글에는 없지만 jackson이나 GSON도 기본적으로 사용법은 유사합니다.
JSON-Simple
json-simple 라이브러리는 JSON 파싱을 지원합니다.
.java 파일에서 JSONObject jsonObj = new JSONObject(); 를 입력하고 컨트롤+시프트+O를 누르면 import 가능한 관련 라이브러리가 나올 것입니다.
거기서 org.json.simple.JSONObject가 나온다면 추가해주시고, 없으면 pom.xml에 dependency를 아래처럼 추가해줍니다.
MAVEN 환경이 아니라면 jar파일 구해서 add .jar 하셔야 하는데 아마 다 있으실 겁니다.
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
</dependency>
JSON Parser
json 데이터가 이미 "[{a,b,c},{d,e,f}]"와 같이 String으로 가지고 있거나,
.json 파일에서 Reader를 통해 텍스트를 읽어 들이는 방법입니다.
import java.io.FileReader;
import org.json.simple.JSONObject;
import org.json.simple.JSONArray;
import org.json.simple.parser.JSONParser;
public class jsonFileRead{
public static void main(String[] args) throws IOException {
// json형태의 string일 경우
String jsonData = "{\"param1\":\"111\",\"param2\":\"222\"}"
// reader를 Object로 parse
JSONParser parser = new JSONParser();
Object obj = parser.parse(jsonData);
// .json 파일일 경우
Reader reader = new FileReader("File Path");
// reader를 Object로 parse
JSONParser parser = new JSONParser();
Object obj = parser.parse(reader);
// 아래 code로 이어짐
}
}
위 절차를 통해 file을 Object로 만드는게 우선입니다.
이제 .json 파일의 형식에 따라 조금씩 다릅니다. Object와 Array에 대해 곰곰이 생각해보면 쉬우니 하나씩 보시면 금방 이해되실 겁니다.
JSON객체 단건 일때 (JSONObject)
{"name":"StudyingAzae","job":"Gamer","age":"3"}
파일에서 읽은 값이 위와 같은 단건의 json객체라면 바로 JSONObject에 담으면 됩니다.
// 상단 코드에 이어
// obj를 JsonObject로 cast
JSONObject jsonObj = (JSONObject)obj;
System.out.println((String)jsonObj.get("name")); // StudyingAzae 출력
JSONObject에서 get한 뒤에는 .toString()도 가능하지만, 이는 값이 null일때 에러가 나기 때문에 nvl이나 null 체크를 넣던지 (Stirng)으로 캐스팅하는 것이 좋습니다.
다건 JSON객체 일때 (JSONArray)
[{"name":"StudyingAzae","job":"Gamer","age":"3"},{"name":"Soodal","job":"Wife","age":"2"}]
파일에서 읽은 값이 위와 같은 다건의 json객체라면 JSONArray에 담았다가 JSONObject로 담습니다.
// 상단 코드에 이어
// obj를 JsonArray로 cast
JSONArray jsonArr = (JSONArray)obj;
// jsonArr에서 하나씩 JSONObject로 cast해서 사용
if (jsonArr.size() > 0){
for(int i=0; i<jsonArr.size(); i++){
JSONObject jsonObj = (JSONObject)jsonArray.get(i);
System.out.println((String)jsonObj.get("name"));
}
// StudyingAzae, Soodal 출력
}
다건 JSON객체가 JSON 내부에 있을때
{
"day":"20211130",
"user":[{"name":"StudyingAzae","job":"Gamer","age":"3"},{"name":"Soodal","job":"Wife","age":"2"}]
}
파일에서 읽은 값이 위와 같이 json안에 있는 array라면 위의 jsonObject와 jsonArray를 반복 사용하면 됩니다.
읽어보면 별거 없습니다.
// 상단 코드에 이어
// obj를 우선 JSONObject에 담음
JSONObject jsonMain = (JSONObject)obj;
// jsonObject에서 jsonArray를 get함
JSONArray jsonArr = (JSONArray)jsonMain.get("user");
// jsonArr에서 하나씩 JSONObject로 cast해서 사용
if (jsonArr.size() > 0){
for(int i=0; i<jsonArr.size(); i++){
JSONObject jsonObj = (JSONObject)jsonArray.get(i);
System.out.println((String)jsonObj.get("name"));
}
// StudyingAzae, Soodal 출력
}
만약 json 다건 중에 또 json 다건이 포함된 파일이면, jsonArray로 담아서 반복문을 통해 다시 jsonArray를 꺼내면 될 것입니다.
이 예제는 굳이 안 써도 충분히 응용 가능하실 겁니다.(혹시 감이 안 오시면 비밀 댓글 달아주시면 보겠습니다)
JSON 파일 읽기
'IT > Java' 카테고리의 다른 글
[JAVA] 가변인자 (0) | 2022.04.07 |
---|---|
Cause: java.lang.NumberFormatException : For input string: 해결방법 (0) | 2022.01.12 |
[JAVA] 유니코드(Unicode) 한글 변환 (0) | 2021.11.27 |
[JAVA] 이클립스 eclipse workspace 변경 (0) | 2021.09.10 |
[JAVA] 자바 파일입출력, 폴더 내 파일 읽기 예제 (0) | 2021.08.23 |
댓글