IT/Java

[Java] GSON을 이용한 Json 파일 읽기 / 저장하기

hi.anna 2021. 7. 18. 14:14

 

GSON 라이브러리를 이용하여

Json 파일을 읽어서 객체(VO)에 저장하는 방법,

객체(VO)를 Json 파일에 저장하는 방법을 소개합니다.

 

  1. 객체(VO) 형태로 Json 파일 읽기 / 쓰기
    1. Json 파일 읽기
    2. Json 파일 쓰기
  2. JsonObject 형태로 Json 파일 읽기 / 쓰기
    1. Json 파일 읽기
    2. Json 파일 쓰기

 

 

1. 객체(VO) 형태로 Json 파일 읽기 / 쓰기

다음의 Json 파일을,

아래의 Lecture 클래스(VO) 형태로 읽고 쓰는 예제입니다.

 

  lecture.json  

{
  "id": 1,
  "students": [
    {
      "id": 123,
      "name": "Tom"
    },
    {
      "id": 124,
      "name": "Jerry"
    }
  ],
  "subject": {
    "name": "Java",
    "professor": "Anna"
  }
}

 

  Lecture.java (VO)  

import java.util.List;
import java.util.Map;

public class Lecture {
    private int id;
    private List<Map<String, Object>> students;
    private Map<String, Object> subject;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public List<Map<String, Object>> getStudents() {
        return students;
    }

    public void setStudents(List<Map<String, Object>> students) {
        this.students = students;
    }

    public Map<String, Object> getSubject() {
        return subject;
    }

    public void setSubject(Map<String, Object> subject) {
        this.subject = subject;
    }

    @Override
    public String toString() {
        return "Lecture [id=" + id + ", students=" + students + ", subject=" + subject + "]";
    }

}

 

1.1 Json 파일 읽기

  코드  

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.Reader;

import com.google.gson.Gson;

public class ReadJsonFileToObject {
    public static void main(String[] args) throws FileNotFoundException {

        // FileReader 생성
        Reader reader = new FileReader("c:\\code\\lecture.json");

        // Json 파일 읽어서, Lecture 객체로 변환
        Gson gson = new Gson();
        Lecture lecture = gson.fromJson(reader, Lecture.class);

        // Lecture 객체 출력
        // Lecture [id=1, students=[{id=123.0, name=Tom}, {id=124.0, name=Jerry}], subject={name=Java, professor=Anna}]
        System.out.println(lecture);
    }
}

Lecture lecture = gson.fromJson(reader, Lecture.class);

Gson의 fromJson에 Reader 객체를 전달하여 Json 파일을 읽고,

Lecture 객체로 변환하여 리턴하였습니다.

 

 

1.2 Json 파일 쓰기

  코드  

import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

public class SaveObjectToJsonFile {
    public static void main(String[] args) throws IOException {

        Gson gson = new GsonBuilder().setPrettyPrinting().create();

        // Lecture Object 생성
        Lecture lecture = new Lecture();

        // lecture Object 값 세팅
        // setId
        lecture.setId(1);

        // setStudents
        List<Map<String, Object>> students = new ArrayList<>();
        students.add(getStudentMap(123, "Tom"));
        students.add(getStudentMap(124, "Jerry"));
        lecture.setStudents(students);

        // setSubject
        Map<String, Object> subject = getSubjectMap("Java", "Anna");
        lecture.setSubject(subject);

        // lecture 객체를 파일에 쓰기
        FileWriter fw = new FileWriter("c:\\code\\lecture.json");
        gson.toJson(lecture, fw);
        fw.flush();
        fw.close();
    }

    public static Map<String, Object> getStudentMap(long id, String name) {
        Map<String, Object> student = new HashMap<>();
        student.put("id", id);
        student.put("name", name);
        return student;
    }

    public static Map<String, Object> getSubjectMap(String name, String professor) {
        Map<String, Object> subject = new HashMap<>();
        subject.put("name", name);
        subject.put("professor", professor);
        return subject;
    }
}

gson.toJson(lecture, fw);

gosn.toJson() 메소드의 2번째 파라미터로 Writer를 전달하여,

주어진 Lecture 객체를 Json 문자열로 변환한 후, 파일에 저장하였습니다.

 

 

 

 

2. JsonObject 형태로 Json 파일 읽기 / 쓰기

2.1 Json 파일 읽기

  코드  

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.Reader;

import com.google.gson.Gson;
import com.google.gson.JsonObject;

public class ReadJsonFileToJsonObject {
    public static void main(String[] args) throws FileNotFoundException {

        // FileReader 생성
        Reader reader = new FileReader("c:\\code\\lecture.json");

        // Json 파일 읽어서, Lecture 객체로 변환
        Gson gson = new Gson();
        JsonObject obj = gson.fromJson(reader, JsonObject.class);

        // JsonObject 객체 출력
        // {"id":1,"students":[{"id":123,"name":"Tom"},{"id":124,"name":"Jerry"}],"subject":{"name":"Java","professor":"Anna"}}
        System.out.println(obj);
    }
}

JsonObject obj = gson.fromJson(reader, JsonObject.class);

파일에서 읽은 Json 정보를 JsonObject에 저장하기 위해서

fromJson() 메소드의 2번째 파라미터로 'JsonObject.class'를 전달하였습니다.

 

 

2.2 Json 파일 쓰기

  코드  

import java.io.FileWriter;
import java.io.IOException;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;

public class SaveJsonFile {
    public static void main(String[] args) throws IOException {

        Gson gson = new GsonBuilder().setPrettyPrinting().create();

        // Json key, value 추가
        JsonObject jsonObject = new JsonObject();
        jsonObject.addProperty("id", 1);

        // students
        JsonObject student1 = getStudentJsonObject(123, "Tom");
        JsonObject student2 = getStudentJsonObject(124, "Jerry");
        JsonArray students = new JsonArray();
        students.add(student1);
        students.add(student2);
        jsonObject.add("students", students);

        // subject
        JsonObject subject = getSubjectJsonObject("Java", "Anna");
        jsonObject.add("subject", subject);

        // JsonObject를 파일에 쓰기
        FileWriter fw = new FileWriter("c:\\code\\lecture.json");
        gson.toJson(jsonObject, fw);
        fw.flush();
        fw.close();
    }

    public static JsonObject getStudentJsonObject(long id, String name) {

        JsonObject studentJsonObject = new JsonObject();

        studentJsonObject.addProperty("id", id);
        studentJsonObject.addProperty("name", name);

        return studentJsonObject;
    }

    public static JsonObject getSubjectJsonObject(String name, String professor) {

        JsonObject subjectJsonObject = new JsonObject();

        subjectJsonObject.addProperty("name", name);
        subjectJsonObject.addProperty("professor", professor);

        return subjectJsonObject;
    }
}

gson.toJson(jsonObject, fw);

toJson() 메소드에 Json 파일에 작성할 JsonObject 객체와 

Writer 객체를 전달하였습니다.

 


 

 

GSON 라이브러리를 사용하여

Json 파일을 읽고, 쓰는 방법을 알아보았습니다.

 

 

반응형