
간단한 JSON 파일을 읽어 파싱하는 예제를 해보겠습니다.
너무 간단하고 쉬운데 외우지는 않아서 매번 검색하기가 귀찮아서 정리를 해두어야겠습니다... 😢
개발 환경
개발 환경은 아래와 같습니다.
Java 11
Gradle 6.8
Gradle 설정하기
이제 Simple JSON 라이브러리를 사용하기 위해 build.gradle
파일에 아래와 같이 dependency를 추가해줍니다.
Simple Json Gradle
dependencies {
implementation 'com.googlecode.json-simple:json-simple:1.1.1'
// ...
}
JSON 파일 작성하기
우선 Formatter를 통해 예쁘게 JSON을 작성합니다.
온라인 포매터 JsonFormatter를 이용하여 간단한 JSON 파일을 작성합니다.
{
"name": "ye-geeee",
"job": "software developer",
"school": {
"high-school": "school1",
"university": "school2"
}
}
JSON 파일 읽기
자, 이제 FileReader
로 파일을 읽고, JSONParser
를 이용하여 파싱합니다.
파싱한 결과는 Java의 Object
로 변환되는데, 이 Object
를 JSONObject
로 타입캐스팅합니다.JSONObject
로 변환된 다음 부터는 get(Object key)
를 통해 값을 가져올 수 있습니다.
private static void readJsonFile(String filePath) {
JSONParser jsonParser = new JSONParser();
try (FileReader reader = new FileReader(filePath)) {
JSONObject user = (JSONObject) jsonParser.parse(reader);
System.out.println(user);
JSONObject school = (JSONObject) user.get("school");
System.out.println(school);
System.out.println(school.get("university"));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
}
JSON 파일 쓰기
JSONObject
를 생성한 다음 put(K key, V value)
를 이용하여 JSON의 key값과 value 값을 넣어줍니다.
그런 다음 FileWriter
로 출력을 해주면 예쁘진 않지만 JSON 파일로 출력된 것을 확인할 수 있습니다.
JSONObject user = new JSONObject();
user.put("name", name);
user.put("job", job);
JSONObject school = new JSONObject();
school.put("high-school", school1);
school.put("university", school2);
user.put("school", school);
try(FileWriter fileWriter = new FileWriter("JSONExample/output.json")) {
fileWriter.write(user.toJSONString());
fileWriter.flush();
} catch (IOException e) {
e.printStackTrace();
}
{"school":{"university":"school2","high-school":"school1"},"name":"ye-geeee","job":"software developer"}
반응형
'Java' 카테고리의 다른 글
Abstract class vs Interface / 어떨 때 사용해야 할까? (0) | 2022.08.28 |
---|