Java에서 org.json 라이브러리를 사용하여 JSON 형식의 파일을 생성, 저장하는 방법에 대해서 알아보겠습니다.

1. org.json 라이브러리

이 글에서는 org.json 라이브러리를 사용하여 JSON 데이터 생성 및 파일을 저장합니다.

예제를 소개하기 전에, Maven 또는 Gradle 프로젝트에서 org.json 라이브러리를 사용하려면 아래 내용을 참조하여 설정하시면 됩니다.

라이브러리 설정 (Maven 프로젝트)

<dependencies>
    <dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
        <version>20210307</version> <!-- 사용 가능한 최신 버전을 사용 -->
    </dependency>
</dependencies>

라이브러리 설정 (Gradle 프로젝트)

dependencies {
    implementation 'org.json:json:20210307' // 사용 가능한 최신 버전을 사용
}

2. key-value 구조의 JSON 생성 및 파일 저장

가장 간단한 key-value 값들을 갖고 있는 JSON 파일을 생성하는 예제입니다.

  • JSONObjectput() 함수로 key-value 값들을 추가
  • JSONObject.toString()으로 데이터를 JSON 형식의 문자열로 변환
  • FileWriter를 통해 JSON 문자열을 파일로 저장
import org.json.JSONObject;
import java.io.FileWriter;
import java.io.IOException;

public class Example {

    public static void main(String[] args) {

        // JSON 파일에 저장할 데이터 생성
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("firstName", "John");
        jsonObject.put("lastName", "Doe");
        jsonObject.put("age", 30);

        try (FileWriter fileWriter = new FileWriter("person.json")) {
            // JSON 파일에 데이터 저장
            fileWriter.write(jsonObject.toString());
            System.out.println("JSON 파일이 생성되었습니다.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위 코드로 생성된 person.json 파일을 열어보면 아래와 같이 저장됩니다.

{"firstName":"John","lastName":"Doe","age":30}

3. 배열을 갖고 있는 JSON 생성 및 파일 저장

JSON은 배열 데이터도 갖고 있습니다. 배열을 갖고 있는 JSON 파일을 저장하는 예제입니다.

  • JSONArray는 배열 데이터를 갖고 있음
  • JSONArray.put()으로 배열에 데이터를 추가, 데이터는 JSONObject가 될 수 있음
  • JSONArray.toString()으로 데이터를 JSON 형식의 문자열로 변환
  • FileWriter를 통해 JSON 문자열을 파일로 저장
import org.json.JSONArray;
import org.json.JSONObject;
import java.io.FileWriter;
import java.io.IOException;

public class Example {

    public static void main(String[] args) {

        // JSON 배열 생성
        JSONArray jsonArray = new JSONArray();

        // JSON 객체 1
        JSONObject jsonObject1 = new JSONObject();
        jsonObject1.put("name", "John");
        jsonObject1.put("age", 30);
        jsonArray.put(jsonObject1);

        // JSON 객체 2
        JSONObject jsonObject2 = new JSONObject();
        jsonObject2.put("name", "Alice");
        jsonObject2.put("age", 25);
        jsonArray.put(jsonObject2);

        try (FileWriter fileWriter = new FileWriter("people.json")) {
            // JSON 파일에 배열 저장
            fileWriter.write(jsonArray.toString());
            System.out.println("JSON 파일이 생성되었습니다.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위 코드로 생성된 people.json 파일을 열어보면 아래와 같이 저장됩니다.

  • JSON에서 [...]은 배열 데이터를 의미
[{"name":"John","age":30},{"name":"Alice","age":25}]

4. 좀 더 복잡한 JSON 생성 및 파일 저장

key-value 데이터와 배열 데이터가 섞여있는 JSON 파일을 저장하는 예제입니다.

  • JSONObject가 가장 상위 노드 객체
  • JSONObject 하위에 key-value 값을 추가하였고, value가 배열 데이터인 JSON 구조
  • JSONObject.toString()는 JSON 데이터를 문자열로 변환
  • JSONObject.toString(4)는 JSON에 들여쓰기 4를 적용하여 문자열 변환
import org.json.JSONArray;
import org.json.JSONObject;
import java.io.FileWriter;
import java.io.IOException;

public class Example {

    public static void main(String[] args) {

        // 최상위 JSON 객체 생성
        JSONObject topLevelObject = new JSONObject();

        // JSON 배열 생성
        JSONArray jsonArray = new JSONArray();

        // JSON 객체 1
        JSONObject jsonObject1 = new JSONObject();
        jsonObject1.put("name", "John");
        jsonObject1.put("age", 30);

        // JSON 배열에 객체 추가
        jsonArray.put(jsonObject1);

        // JSON 객체 2
        JSONObject jsonObject2 = new JSONObject();
        jsonObject2.put("name", "Alice");
        jsonObject2.put("age", 25);

        // JSON 배열에 객체 추가
        jsonArray.put(jsonObject2);

        // 최상위 JSON 객체에 배열 추가
        topLevelObject.put("people", jsonArray);

        // JSON 파일에 최상위 객체 저장
        try (FileWriter fileWriter = new FileWriter("example.json")) {
            fileWriter.write(topLevelObject.toString(4));
            System.out.println("JSON 파일이 생성되었습니다.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위 코드로 생성된 example.json 파일을 열어보면 아래와 같이 저장됩니다.

  • JSONObject.toString(4)로, 들여쓰기 4를 적용하여 JSON 파일의 가독성이 좋아졌습니다.
{"people": [
    {
        "name": "John",
        "age": 30
    },
    {
        "name": "Alice",
        "age": 25
    }
]}