import java.util.Arrays;
import com.google.gson.Gson;
public class Ex_Gson01 {
public static void main(String[] args) {
Gson gson = new Gson();
// Serialization : 자바 객체를 json문자열로 변환해 준다.
System.out.println(gson.toJson(1));
System.out.println(gson.toJson("abcd"));
System.out.println(gson.toJson(new Long(10)));
System.out.println(gson.toJson(new int[] {1,2,3,4,5}));
// toJson method는 넘어온 자바 형식의 데이터를 json모양의 문자열로 만들어 준다.
String jsonStr = gson.toJson(new int[] {1,2,3,4,5});
System.out.println(jsonStr);
// Deserialization(역직렬화) : json형식의 문자열을 자바에서 사용하는 자료형으로 변환해준다.
// fromJson 메서드는 넘어온 문자열을 두번째 인수의 자바형식으로 만들어 준다.
int[]ar = gson.fromJson(jsonStr, int[].class);
System.out.println(Arrays.toString(ar));
System.out.println(gson.fromJson("123", int.class)*2);
System.out.println(gson.fromJson("123", double.class)*2);
}
}
Gson이란?
역직렬화, 직렬화가 가능하게 해주는 구글에서 제공하는 라이브러리이다.
사용법은 이와 같다.
1. Gson gson = new Gson(); gson 인스턴스 생성
2. Serialization: 자바 객체를 json문자열로 변환해 준다.
3. toJson method는 넘어온 자바 형식의 데이터를 json모양의 문자열로 만들어 준다.
1
"abcd"
10
[1,2,3,4,5]
이렇게 자바 객체들이 json문자열로 만들어 진다.
(여기까지가 직렬화이다)
4.밑에 String jsonStr = gson.toJson(new int[]{1,2,3,4,5}); 이렇게 하면 자바의 배열 객체가 json으로 변환 후 String 타입의
jsonStr에 저장된다.
이를 출력하면 [1,2,3,4,5]가 출력이 된다.
아래 int[]ar = gson.fromJson(jsonStr, int[].class);
는 스트링 타입의 jsonStr을 인트배열(자바객체) 자바형식으로 만들어 준다.
이를 통해 Arrays.toString(ar)이 가능하다.
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import lombok.Data;
@Data
class BagOfPrimitives {
private int value1 = 1;
private String value2 = "abc";
private transient int value3 = 3; // transient 예약어는 직렬화에서 제외 시켜라
}
public class Ex_Gson02 {
public static void main(String[] args) {
// 사용자가 만든 클래스도 json으로 상호 변환이 가능할까?
Gson gson = new Gson();
// Serialization : 자바 객체를 json문자열로 변환해 준다.
// toJson method는 넘어온 자바 형식의 데이터를 json모양의 문자열로 만들어 준다.
BagOfPrimitives vo = new BagOfPrimitives();
String jsonData = gson.toJson(vo);
System.out.println(jsonData);
// Deserialization(역직렬화) : json형식의 문자열을 자바에서 사용하는 자료형으로 변환해준다.
// fromJson 메서드는 넘어온 문자열을 두번째 인수의 자바형식으로 만들어 준다.
BagOfPrimitives vo2 = gson.fromJson(jsonData, BagOfPrimitives.class);
System.out.println("읽은 값 : " + vo2);
JsonObject obj = new JsonObject();
obj.addProperty("name", "한사람");
obj.addProperty("age", 22);
obj.addProperty("gender", true);
// 직렬화
System.out.println(gson.toJson(obj));
// 저장 : 직렬화
String t = gson.toJson(obj);
// 읽기 : 역직렬화
JsonObject obj2 = gson.fromJson(gson.toJson(obj), JsonObject.class);
System.out.println(obj2);
System.out.println("이름 : " + obj2.get("name"));
System.out.println("나이 : " + (obj2.get("age").getAsInt()+1));
System.out.println("성별 : " + (obj2.get("gender").getAsBoolean()?"남":"여"));
try (PrintWriter pw = new PrintWriter("obj.json")){
gson.toJson(obj,pw);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
// 저장된
try(FileReader fr = new FileReader("obj.json")){
JsonObject obj3 = gson.fromJson(fr, JsonObject.class);
System.out.println("읽은 값 : " + obj3);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
두번째 예제이다.
사용자가 만든 클래스 BagOfPrimitives 를 상호 변환 해주는 예제이다.
gson 인스턴스를 만들어준다.
BagOfPrimitives 인스턴스를 생성한다.
문자열에 toJson을 하여 vo를 jsonData에 넣어준다.
(직렬화 성공!)
역직렬화는
아까 json으로 바꾼 jsonData를
BagOfPrimitives vo2 = gson.fromJson(jsonData, BagOfPrimitives.class);
인스턴스 vo2에 jsonData를 클래스타입 BagOfPrimitives 으로 바꿔주어 자바 객체의 인스턴스로 바꿔준다.
(역직렬화 성공)!
JsonObject를 통해 직렬화를 해보자!
JsonObject의 인스턴스를 만들어 주고
인스턴스.addProperty("key","value"); 해서 배열의 값이 obj에 저장된다
이를 출력할때 gson.toJson(obj)를 해서 직렬화 시킨다.
이를
자바에서 문자열에 json타입의 obj인스턴스를 저장할 수 있다.
String t = gson.toJson(obj);
PrintWriter를 통해 json파일을 만드는 예제이다.
갑자기 어렵다. 이분에서는 스트림에 대해 잘 알지 못하기 때문에 공부가 필요할 것 같다.
'JAVA개념' 카테고리의 다른 글
배열의 복사 (0) | 2021.11.24 |
---|---|
변수의 타입 (0) | 2021.11.23 |
변수란? (0) | 2021.11.23 |
자바언어의 특징(자바의 정석) (0) | 2021.11.23 |
자바 입출력(1) DO it! 자바 (1) | 2021.07.02 |