Android/Android관련 이것 저것..

Gson 라이브러리 사용하기

봄석 2019. 1. 22. 22:18

Gson 라이브러리 사용하기

Gson은 java Object를 JSON 표현으로 변환하는데 사용할 수 있는 java 라이브러리입니다.

JSON 문자열을 java객체로 변환하는데도 사용할 수 있습니다.


주요기능

  • 기본형 변환 지원
  • 클래스 변환 지원
  • 제네릭 지원, List , Map 등 콜렉션을 변환 할 때 유용
  • 멀티스레드 지원, Gson 내부 상태를 갖지않아 Thrad-safe이다
  • 빠르고 가볍다. Serialize보다 좋음

생성하기
//Java
Gson gson=new Gson()
//Kotlin
var gson=Gson()



형변환 (Java->Json)

gson.toJson(short, int, long, float, double, String, Object)


형변환 (Json->java)

gson.fromJson(json문자, javaClaass)


# Maven 의존성 추가

<dependency>

  <groupId>com.google.code.gson</groupId>

  <artifactId>gson</artifactId>

  <version>2.8.4</version>

</dependency>



ex)자바 기본 자료형 변환하기

// (Serialization)
Gson gson = new Gson();
gson.toJson(1);            // ==> prints 1
gson.toJson("abcd");       // ==> prints "abcd"
gson.toJson(new Long(10)); // ==> prints 10
int[] values = { 1 };
gson.toJson(values);       // ==> prints [1] 
 
// (Deserialization)
int one = gson.fromJson("1", int.class);
Integer one = gson.fromJson("1", Integer.class);
Long one = gson.fromJson("1", Long.class);
Boolean false = gson.fromJson("false", Boolean.class);
String str = gson.fromJson("\"abc\"", String.class);
String anotherStr = gson.fromJson("[\"abc\"]", String.class);



ex) 자바의 객체 변환 하기

class BagOfPrimitives {
  private int value1 = 1;
  private String value2 = "abc";
  private transient int value3 = 3;
  BagOfPrimitives() {
    // no-args constructor
  }
}


json 표현식으로 변환해보면

// (Serialization)
BagOfPrimitives obj = new BagOfPrimitives();
Gson gson = new Gson();
String json = gson.toJson(obj); 

// ==> json is {"value1":1,"value2":"abc"}



ex) 배열예시 ,배열은 []로 표현되어 나오며,어렵지않게 상호변환가능

Gson gson = new Gson();
int[] ints = {1, 2, 3, 4, 5};
String[] strings = {"abc", "def", "ghi"};
 
// (Serialization)
gson.toJson(ints);     // ==> prints [1,2,3,4,5]
gson.toJson(strings);  // ==> prints ["abc", "def", "ghi"]
 
// (Deserialization)
int[] ints2 = gson.fromJson("[1,2,3,4,5]", int[].class);

// ==> ints2 will be same as ints


ex)컬렉션 예시, 배열과 같이 []로 표현되나 역직렬화 할 때 좀 다른걸 알 수 있다.


Gson gson = new Gson();
Collection<Integer> ints = Lists.immutableList(1,2,3,4,5);
 
// (Serialization)
String json = gson.toJson(ints); // ==> json is [1,2,3,4,5]
 
// (Deserialization)
Type collectionType = new TypeToken<Collection<Integer>>(){}.getType();
Collection<Integer> ints2 = gson.fromJson(json, collectionType);