간단한 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로 변환되는데, 이 ObjectJSONObject로 타입캐스팅합니다.
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
복사했습니다!