Java의 JSON 변환 라이브러리 GSON의 기본 사용 강좌
Gson에서 가장 중요한 대상은 Gson과 GsonBuilder 두 개입니다.
Gson은 기본적인 2가지가 있어요.
(1) toJson() C 자바 객체를 JSON으로 변환
(2) fromJson() C JSON을 자바 객체로 변환
엔티티 클래스 작성:
public class People {
  String name;
  int age;
  boolean setName;
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public int getAge() {
    return age;
  }
  public void setAge(int age) {
    this.age = age;
  }
  public boolean getSetName() {
    return setName;
  }
  public void setSetName(boolean setName) {
    this.setName = setName;
  }
  @Override
  public String toString() {
    return "name=" + name + " age=" + age + " setName=" +setName;
  }
}
import com.google.gson.ExclusionStrategy;
import com.google.gson.FieldAttributes;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
/**
 * Convert java object to json.
 */
public class GsonTest {
  public static void main(String[] args) {
    People p = new People();
    p.setAge(20);
    p.setName("People");
    p.setSetName(true);
    Gson gson = new Gson();
    System.out.println(gson.toJson(p));
  }
}
{"name":"People","age":20,"setName":true}
Gson의 가방을 한참 동안 찾았는데 com을 발견했다.google.gson 패키지 아래에는 다음과 같은 인터페이스가 있습니다. Exclusion Strategy, 무엇을 하는지 알 수 없지만 이름에 따라 이 인터페이스는 Gson 변환 배제 정책을 설정하는 데 사용된 것으로 추정됩니다. 그래서 홈페이지에http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/index.html이 인터페이스를 찾아보니 이 인터페이스를 실현하고 클래스의 대상을 Gson에 끼워 넣으면 json으로 변환할 때 Gson은 지정한 클래스나 속성을 필터합니다.그래서 다음 코드가 생겼습니다.
import com.google.gson.ExclusionStrategy;
import com.google.gson.FieldAttributes;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
/**
 * Convert java object to json, skip specific fileds.
 */
public class GsonTest {
  public static void main(String[] args) {
    People p = new People();
    p.setAge(20);
    p.setName("People");
    p.setSetName(true);
    ExclusionStrategy excludeStrategy = new SetterExclusionStrategy();
    Gson gson1 = new GsonBuilder()
      .setExclusionStrategies(excludeStrategy)
      .create();
    Gson gson2 = new Gson();
    String json1 = gson1.toJson(p);
    String json2 = gson2.toJson(p);
    System.out.println(json1);
    System.out.println(json2);
    People p1 = gson1.fromJson(json1, People.class);
    People p2 = gson2.fromJson(json2, People.class);
    System.out.println(p1);
    System.out.println(p2);
  }
  private static class SetterExclusionStrategy implements ExclusionStrategy {
    public boolean shouldSkipClass(Class<?> clazz) {
      return false;
    }
    public boolean shouldSkipField(FieldAttributes f) {
      return f.getName().startsWith("set");
    }
  }
}
{"name":"People","age":20}
{"name":"People","age":20,"setName":true}
name=People age=20 setName=false
name=People age=20 setName=true
Expose:
이 주석은 속성에 작용합니다. 서열화와 반서열화가 있을 때 이 속성은 Gson 대상에 노출됩니다.이 메모는 Gson 객체를 만들 때만 GsonBuilder 방식으로 GsonBuilder를 만들고 호출합니다.excludeFieldsWithoutExposeAnnotation() 메서드는 유효하지 않습니다. 그렇지 않으면 유효하지 않습니다.다음은 @Expose 메모를 사용하는 방법에 대한 예입니다.
public class User {
  @Expose private String firstName;
  @Expose(serialize = false) private String lastName;
  @Expose (serialize = false, deserialize = false) private String emailAddress;
  private String password;
}
SerializedName:
이 주석은 속성에 작용합니다. 이 속성이 Json으로 서열화될 때 이름을 주해의value 속성으로 서열화해야 하는 값을 나타냅니다.
이 메모는 기본 이름 정책을 포함하여 FieldNaming Policy를 덮어씁니다.다음은 @SerializedName 메모를 사용하는 방법에 대한 예입니다.
public class SomeClassWithFields {
  @SerializedName("name") private final String someField;
  private final String someOtherField;
  public SomeClassWithFields(String a, String b) {
   this.someField = a;
   this.someOtherField = b;
  }
}
SomeClassWithFields objectToSerialize = new SomeClassWithFields("a", "b");
Gson gson = new Gson();
String jsonRepresentation = gson.toJson(objectToSerialize);
System.out.println(jsonRepresentation);
{"name":"a","someOtherField":"b"}
참고: @SerializedName의value에서 지정한 속성 이름은 유효한 Json 속성 이름이어야 합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.