Jackson

Jackson簡介

Jackson是一個簡單基於Java應用庫,Jackson可以簡單的將Java對象轉換成Json對象和xml文檔,同樣也可以將Json、xml轉換成Java對象的。Jackson所依賴的Jar包比較少,簡單易用,並且性能也相對要高一些,並且Jackson的社區活躍,更新速度也比較快。

Jackson的特點

  • 容易使用 -Jackson的API提供了一個高層次外觀,以簡化常用用例。
  • 無需創建映射-API提供了默認的映射大部分對象序列化。
  • 性能高-快速,低內存佔用,適合大型對象圖表或系統。
  • 乾淨的 JSON - Jackson 創建一個乾淨和緊湊的 JSON 結果,這是讓人很容易閱讀。
  • 不依賴 - 庫不需要任何其他的庫,除了 JDK。
  • 開源代碼 - Jackson 是開源的,可以免費使用。

Jackson註解

Jackson 類庫包含了很多註解,可以讓我們快速建立 Java 類與 JSON 之間的關係。
@JsonProperty
@JsonProperty 註解指定一個屬性用於 JSON 映射,默認情況下映射的 JSON 屬性與註解的屬性名稱相同,不過可以使用該註解的 value 值修改 JSON 屬性名,該註解還有一個 index 屬性指定生成 JSON 屬性的順序,如果有必要的話。

@JsonIgnore
@JsonIgnore註解用於排除某個屬性,這樣該屬性就不會被 Jackson 序列化和反序列化。

@JsonIgnoreProperties
@JsonIgnoreProperties 註解是類註解。在序列化爲 JSON 的時候,@JsonIgnoreProperties({“prop1”, “prop2”}) 會忽略 pro1 和 pro2 兩個屬性。在從 JSON 反序列化爲 Java 類的時候,@JsonIgnoreProperties(ignoreUnknown=true) 會忽略所有沒有 Getter 和 Setter 的屬性。該註解在 Java 類和 JSON 不完全匹配的時候很有用。

@JsonIgnoreType
@JsonIgnoreType 也是類註解,會排除所有指定類型的屬性。

@JsonPropertyOrder
@JsonPropertyOrder 和 @JsonProperty 的 index 屬性類似,指定屬性序列化時的順序。

@JsonRootName
@JsonRootName 註解用於指定 JSON 根屬性的名稱。

Jackson 的使用

對象的序列化與反序列化

/**
     * json轉對象
     * @throws IOException
     */
    public static User json2Pojo() throws IOException {

        //創建ObjectMapper 核心
        ObjectMapper mapper=new ObjectMapper();

        //解析字符串
        String jsonString = "{\"id\":1,\"username\":\"zhansan \",\"password\":\"123456\",\"name\":\"James\"}";

        //反序列化到對象 json轉Java對象
        User user = mapper.readValue(jsonString, User.class);

        System.out.println(user);
         return user;
    }
 /**
     * 對象轉Json
     * @throws JsonProcessingException
     */
    public static void pojo2Json() throws IOException {
        //創建ObjectMapper 核心
        ObjectMapper mapper=new ObjectMapper();
        String json = mapper.writeValueAsString(json2Pojo());
        System.out.println(json);

    }

集合的序列化與反序列化

public class JsonTester {
    public static void main(String[] args) {
        // 創建 ObjectMapper 對象
        ObjectMapper mapper = new ObjectMapper();
        String jsonString = "{\"draw\":1,\"recordsTotal\":1,\"recordsFiltered\":1,\"data\":[{\"id\":33,\"title\":\"ad1\",\"subTitle\":\"ad1\",\"titleDesc\":\"ad1\",\"url\":\"https://sale.jd.com/act/XkCzhoisOMSW.html\",\"pic\":\"https://m.360buyimg.com/babel/jfs/t20164/187/1771326168/92964/b42fade7/5b359ab2N93be3a65.jpg\",\"pic2\":\"\",\"content\":\"<p><br></p>\"}],\"error\":null}";

        try {
            // 反序列化 JSON 到樹
            JsonNode jsonNode = mapper.readTree(jsonString);

            // 從樹中讀取 data 節點
            JsonNode jsonData = jsonNode.findPath("data");
            System.out.println(jsonData);

            // 反序列化 JSON 到集合
            JavaType javaType = mapper.getTypeFactory().constructParametricType(ArrayList.class, TbContent.class);
            List<TbContent> tbContents = mapper.readValue(jsonData.toString(), javaType);
            for (TbContent tbContent : tbContents) {
                System.out.println(tbContent);
            }

            // 序列化集合到 JSON
            String json = mapper.writeValueAsString(tbContents);
            System.out.println(json);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

class TbContent {
    private Long id;
    private String title;
    private String subTitle;
    private String titleDesc;
    private String url;
    private String pic;
    private String pic2;
    private String content;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getSubTitle() {
        return subTitle;
    }

    public void setSubTitle(String subTitle) {
        this.subTitle = subTitle;
    }

    public String getTitleDesc() {
        return titleDesc;
    }

    public void setTitleDesc(String titleDesc) {
        this.titleDesc = titleDesc;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getPic() {
        return pic;
    }

    public void setPic(String pic) {
        this.pic = pic;
    }

    public String getPic2() {
        return pic2;
    }

    public void setPic2(String pic2) {
        this.pic2 = pic2;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    @Override
    public String toString() {
        return "TbContent{" +
                "id=" + id +
                ", title='" + title + '\'' +
                ", subTitle='" + subTitle + '\'' +
                ", titleDesc='" + titleDesc + '\'' +
                ", url='" + url + '\'' +
                ", pic='" + pic + '\'' +
                ", pic2='" + pic2 + '\'' +
                ", content='" + content + '\'' +
                '}';
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章