IT/Java
[Java] GSON을 이용한 Json 파일 읽기 / 저장하기
hi.anna
2021. 7. 18. 14:14
GSON 라이브러리를 이용하여
Json 파일을 읽어서 객체(VO)에 저장하는 방법,
객체(VO)를 Json 파일에 저장하는 방법을 소개합니다.
- 객체(VO) 형태로 Json 파일 읽기 / 쓰기
- Json 파일 읽기
- Json 파일 쓰기
- JsonObject 형태로 Json 파일 읽기 / 쓰기
- Json 파일 읽기
- 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 파일을 읽고, 쓰는 방법을 알아보았습니다.
반응형