Java Study

Gson이란?

Z00_HWAN_99 2024. 7. 18. 17:08
728x90
반응형

Gson??

  • JAVA에서 Json객체를 파싱하고, 생성하기 위해 사용되는 구글에서 개발한 오픈 소스
  • JavaObject를 Json 문자열로 변환할 수 있고, Json 문자열을 JavaObject로 변환 가능.
  • 직접 라이브러리를 다운 받아 프로젝트에 추가.
  • Gson 객체 생성 방법
    1. new Gson()
    2. new GsonBuilder.create()
public static void main(String[] args) {
  Gson gson1 = new Gson();
  Gson gson2 = new GsonBuilder().create();
  Gson gson3 = new GsonBuilder().setPrettyPrinting().create();
}

GsonBuilder란?

  • 구글의 Gson 라이브러리에서 제공하는 객체 생성 도구
  • Gson 객체 생성 가능.
  • 설정 옵션을 통해 사용자 원하는 형태와 기능으로 Gson 객체를 커스터마이징 할 수 있게 함.
  • Json 데이터의 직렬화와 역직렬화 과정에서 발생할 수 있는 여러 상황에 대응 가능.
  • 효율적이고 안정적인 데이터 처리 지원.
  • EX)
    1. disableHtmlEscaping() :  Html 문자를 유니코드로 이스케이프 처리함. GsonBuilder를 통해 생성된 객체가 Html 문자 그대로 전달함.
    2. setPretyPrinting() : Json 문자열을 가독성 좋게 출력하는 옵션.
    3. serializeNulls() : 기본적으로 Gson은 null 필드를 생략하지만, 해당 옵션을 사용하면 null로 인해 필드가 누락된 경우를 발생할 수 있는 예외상황을 예방 가능.
package json.gson;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.util.ArrayList;
import java.util.List;
import org.json.JSONObject;

public class GsonUtil {
  private static Gson gson1 = new Gson();
  private static Gson gson2 = new GsonBuilder()
      .disableHtmlEscaping() // HTML 문자를 유니코드로 이스케이프 처리한다. GsonBuilder 를 통해 생성된 객체가 HTML 문자 그대로 전달한다.
      .setPrettyPrinting() //Json 문자열을 가독성 좋게 출력하게 하는 옵션
      .serializeNulls() //기본적으로 Gson은 null 필드를 생략하지만, 해당 옵션을 사용하면 null로 인해 필드가 누락된 경우를 발생할 수 있는 예외상황을 예방할 수 있다.
      .create();

  private static String getJsonData(){
    JSONObject jsonObject = new JSONObject();
    jsonObject.put("data", "Test Data <연습 파일>");
    //JsonObject를 Json 문자열로 변환(toJson())
    return gson2.toJson(jsonObject);
  }

  private static UserInfo getData(){
    UserInfo userInfo = new UserInfo();
    userInfo.setNum(null);
    userInfo.setName("ssg");
    List<String> roles = new ArrayList<>();
    roles.add("Roll-1");
    roles.add("Roll-2");
    roles.add("Roll-3");

    userInfo.setRoles(roles);
    return userInfo;
  }

  public static void main(String[] args) {
    System.out.println(getJsonData());
    System.out.println(gson2.toJson(getData()));
  }
}

실전 예제

  • Student 클래스를 Json 문자열로 변화하여 출력할 수 있게 하는 ObjectToJson 클래스를 작성
  • String jsonStudent = "{\"id\":1,\"name\":\"YOYO\"}"; 를 Json 문자열을 Student 객체로 변환하여 출력
package json.gson;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.json.JSONObject;

public class ObjectToJson {
  private static Gson gson = new GsonBuilder()
      .disableHtmlEscaping()
      .setPrettyPrinting()
      .serializeNulls()
      .create();

  public static void main(String[] args) {
    studentToJson();
    jsonToStudent("{\"id\":1,\"name\":\"YOYO\"}");
  }

  private static void studentToJson(){
  //Student 클래스를 Json 문자열로 변화하여 출력할 수 있게 하는 ObjectToJson 클래스를 작성
    Student student1 = new Student(1, "홍길동");
    System.out.println(gson.toJson(student1));
  }

  private static void jsonToStudent(String str){
  //String jsonStudent = "{\"id\":1,\"name\":\"YOYO\"}"; 를 Json 문자열을 Student 객체로 변환하여 출력
    Student student2 = new Student();
    JSONObject jsonObject = new JSONObject(str);
    gson.toJson(jsonObject);
    student2.setId(jsonObject.getInt("id"));
    student2.setName(jsonObject.getString("name"));
    System.out.println("학생의 Id : " + student2.getId());
    System.out.println("학생의 name : " + student2.getName());
  }
}
package json.gson;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
  private int id;
  private String name;
}

https://github.com/bottomsUp-99?tab=repositories

 

bottomsUp-99 - Overview

Backend Developer. bottomsUp-99 has 10 repositories available. Follow their code on GitHub.

github.com

 

728x90
반응형

'Java Study' 카테고리의 다른 글

데이터 입출력  (2) 2024.07.17
java.base 모듈  (0) 2024.07.13
Lamda(람다식)  (0) 2024.07.12
제네릭(Generic)이란?  (0) 2024.07.10
JDBC 라이브러리  (0) 2024.07.07