初識Jackson

首先咱們學習json的時候第一想到的是如何將JavaBean對象轉化成Json字符串,或者怎樣將json字符串轉化成JavaBean對象。html

一.JavaBean對象轉化成Json字符串(串行化)

使用ObjectMapper objectMapper = new ObjectMapper()對象。java

直接貼代碼吧,省略了了JavaBean的代碼,json

若是不想一些屬性被轉化成json字符串的話,能夠採用如下方法忽略掉:數組

1.直接在JavaBean屬性上加上註解@JsonIgnore 

2.在類的上面加上@JsonIgnoreProperties

3.在屬性上面標識@jsonView

JavaBean:app

由於Ios,Android均繼承了Default類因此在輸出Ios或Android視圖的時候也會輸出Default視圖。ide

測試代碼:學習

輸出結果:測試

4.使用MixIn Annotation進行串行化

測試代碼:url

測試結果:spa

5. 第4點與JsonFilter結合使用實現動態地過濾屬性

輸出結果:

二.json字符串轉化成JavaBean對象(反串行化)

1.直接使用以下方式

2.使用JsonTree方式

 

三.自定義Json序列化類(可用於解決日期轉Json的格式問題)

首先自定義一個序列化類(該類不能定義成內部類,不然報錯)

而後在JavaBean屬性上加上@JsonSerialize註解

測試代碼結果:

四。當咱們串行化時,若是須要將值爲null的屬性轉成Json字符串時其值變爲空,使用如下方法

objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {
            @Override
            public void serialize(Object value, JsonGenerator gen, SerializerProvider serializers)
                    throws IOException {
                gen.writeString("");
            }
        });

 

五:當咱們不須要將值爲Null的屬性轉化爲Json字符串時

objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);

六:當咱們須要把Json字符串反串行化到集合時

①將簡單的Json字符串反串行化到Map對象裏時

String turingResult =
                "{\"code\":302000,\"text\":\"親,已幫您找到相關新聞\"}";
        ObjectMapper objectMapper = new ObjectMapper();
//當須要用集合時,必須使用TypeFactory來構造集合類型
        TypeFactory typeFactory = objectMapper.getTypeFactory();
        Map<String, Object> map =
                objectMapper.readValue(turingResult,
                        typeFactory.constructMapType(HashMap.class, String.class, Object.class));
        System.out.println(map);

②將Json數組反串行化到List集合裏

String turingResult =
                "[{\"article\":\"工信部:今年將大幅提網速降手機流量費\",\"source\":\"網易新聞\",\"icon\":\"\",\"detailurl\":\"http://news.163.com/15/0416/03/AN9SORGH0001124J.html\"},{\"article\":\"北京最強沙塵暴午後襲滬 當地叫停廣場舞\",\"source\":\"網易新聞\",\"icon\":\"\",\"detailurl\":\"http://news.163.com/15/0416/14/ANB2VKVC00011229.html\"},{\"article\":\"公安部:小客車駕照年內試點自學直考\",\"source\":\"網易新聞\",\"icon\":\"\",\"detailurl\":\"http://news.163.com/15/0416/01/AN9MM7CK00014AED.html\"}]";

        ObjectMapper objectMapper = new ObjectMapper();
        //當須要用集合時,必須使用TypeFactory來構造集合類型
        TypeFactory typeFactory = objectMapper.getTypeFactory();
        List<Map<String, Object>> list =
                objectMapper.readValue(turingResult, typeFactory
                        .constructCollectionType(ArrayList.class, typeFactory.constructMapType(
                                HashMap.class, String.class, String.class)));
        System.out.println(list);
相關文章
相關標籤/搜索