Json Utils

Json Utils

2021, Oct 11    

Hướng dẫn thao tác Json thông qua Gson hoặc Jackson

Interface

  • Một số thao tác Json cơ bản
    • String toJson(Object obj): chuyển đổi một Java object sang chuỗi String
    • T fromJson(String json, Class clazz): convert String thành một Java object
    • T fromJson(String json, TypeToken type): convert String thành một collection
    • Thay đổi param name bằng annotation

Gson

  • Thêm dependency gson trong pom.xml
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.6</version>
    </dependency>
  • Tạo và sử dụng thông qua class Gson
public class GsonUtils {
  private static final Gson GSON = new GsonBuilder().create();

  private GsonUtils() {}

  public static <T> T fromJson(String json, Class<T> clazz) {
    return GSON.fromJson(json, clazz);
  }

  public static <T> T fromJson(String json, TypeToken<T> type) {
    return GSON.fromJson(json, type.getType());
  }

  public static String toJson(Object obj) {
    return GSON.toJson(obj);
  }
}
  • Sử dụng annotation SerializedName lên object cần thao tác để thay đổi param name
public class GsonAnnotationObject {

  @SerializedName("object_id")
  public int objectId;

  @SerializedName("object_name")
  public String objectName;

}

Sử dụng

GsonAnnotationObject annotationObject = new GsonAnnotationObject(1, "A");
System.out.println(GsonUtils.toJson(annotationObject));

Output:

{"object_id":1,"object_name":"A"}

Jackson

  • Thêm dependency jackson-databind trong pom.xml
<dependencies>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.12.5</version>
    </dependency>
</dependencies>
  • Tạo và sử dụng thông qua class ObjectMapper
public class JacksonUtils {

  private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();

  public static <T> T fromJson(String json, Class<T> clazz) throws JacksonParserException {
    try {
      return OBJECT_MAPPER.readValue(json, clazz);
    } catch (JsonProcessingException e) {
      throw new JacksonParserException(e);
    }
  }

  public static <T> T fromJson(String json, TypeReference<T> type) throws JacksonParserException {
    try {
      return OBJECT_MAPPER.readValue(json, type);
    } catch (JsonProcessingException e) {
      throw new JacksonParserException(e);
    }
  }

  public static String toJson(Object obj) throws JacksonParserException {
    try {
      return OBJECT_MAPPER.writeValueAsString(obj);
    } catch (JsonProcessingException e) {
      throw new JacksonParserException(e);
    }
  }

}
  • Sử dụng annotation JsonAlias lên object cần thao tác để thay đổi param name
@AllArgsConstructor
@NoArgsConstructor
public class JacksonAnnotationObject {

  @JsonAlias("object_id")
  public int objectId;

  @JsonAlias("object_name")
  public String objectName;

}

Sử dụng

GsonAnnotationObject annotationObject = new GsonAnnotationObject(1, "A");
System.out.println(GsonUtils.toJson(annotationObject));

Output:

{"object_id":1,"object_name":"A"}

Source code ở đây