<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-67  評論-522  文章-0  trackbacks-0
        總結一下自己使用jackson處理對象與JSON之間相互轉(zhuǎn)換的心得。
        jackson是一個用Java編寫的,用來處理JSON格式數(shù)據(jù)的類庫,它速度非???,目前來看使用很廣泛,逐漸替代了Gsonjson-lib。
        如果直接引入jar包,可以訪問這個地址下載http://jackson.codehaus.org/1.9.11/jackson-all-1.9.11.jar
        如果使用maven構建項目,加入下面的依賴

    <dependency>

           <groupId>org.codehaus.jackson</groupId>

           <artifactId>jackson-mapper-asl</artifactId>

           <version>1.9.11</version>

        </dependency>
        無代碼無真相,為了最簡單的說明,我直接上代碼。

    public class User {

        private String name;

        private Gender gender;

        private List<Account> accounts;

        省略getset方法

    ...

    }

    public enum Gender {

        MALE,

        FEMALE

    }

    public class Account {

        private Integer id;

        private String cardId;

        private BigDecimal balance;

     private Date date;

     省略getset方法

    ...

    }

    public static void main(String[] args) throws Exception {

           User user = new User();

           user.setName("菠蘿大象");

           user.setGender(Gender.MALE);

           List<Account> accounts = new ArrayList<Account>();

           Account account = new Account();

           account.setId(1);

           account.setBalance(BigDecimal.valueOf(1900.2));

           account.setCardId("423335533434");

           account.setDate(new Date());

           accounts.add(account);

           account = new Account();

           account.setId(2);

           account.setBalance(BigDecimal.valueOf(5000));

           account.setCardId("625444548433");

           account.setDate(new Date());

           accounts.add(account);

           user.setAccounts(accounts);

    ObjectMapper mapper = new ObjectMapper();

           mapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, Boolean.TRUE);

           String json = mapper.writeValueAsString(user);

           System.out.println("Java2Json: "+json);

           user = mapper.readValue(json, User.class);

           System.out.println("Json2Java: "+mapper.writeValueAsString(user));

    }
        mapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, Boolean.TRUE);這是輔助設置,控制格式化輸出。
        之前使用的mapper.getSerializationConfig().setXxx方法現(xiàn)在很多都已經(jīng)被標注為@Deprecated了,因此請大家使用上面的方式處理。
        SerializationConfig.Feature枚舉里面還有很多其它的設置項,比如日期,比如要不要輸出null值等等。其它的還有:
            org.codehaus.jackson.JsonGenerator.Feature.* 
            org.codehaus.jackson.JsonParser.Feature.*
        讓我們來看看輸出結果,兩次轉(zhuǎn)換之后,打印出來的字符串應該是一樣的:
        
        OK,果然結果是一致的,大家現(xiàn)在應該會使用jackson進行JavaJson的互相轉(zhuǎn)換了吧?恩,現(xiàn)在再考慮一種情況,如果想將List<User>JSON字符串反轉(zhuǎn)為泛型,應該怎么做呢?
        想這樣:mapper.readValue(json, List<User>.class)?這可是錯誤的,這里的參數(shù)是Class<T> valueType,valueTypeClass<T>類的對象。如上面所示User.class 就是Class<User>類的對象。因此要想獲得泛型的集合類型需要通過其它辦法:
    /**
     * 獲取泛型的Collection Type
     * @param jsonStr json字符串
     * @param collectionClass 泛型的Collection
     * @param elementClasses 元素類型
     */
    public static <T> T readJson(String jsonStr, Class<?> collectionClass, Class<?>... elementClasses) throws Exception {

           ObjectMapper mapper = new ObjectMapper();

           JavaType javaType = mapper.getTypeFactory().constructParametricType(collectionClass, elementClasses);

           return mapper.readValue(jsonStr, javaType);

    }
        定義一個List<User>,向里面添加兩次user,先調(diào)用writeValueAsString方法打印出json,再調(diào)用readJson方法,這不僅可以轉(zhuǎn)換泛型List<T>,還可以用于其它集合,比如Map<K,V>等等。
        List<User> list = readJson(json, List.class, User.class); 
        ObjectMapper可以讓對象與JSON之間相互轉(zhuǎn)換,除此之外Jackson還提供了JsonGenerator JsonParser 這兩個類,它們可以更細粒度的處理序列化與反序列化。調(diào)用ObjectMapperwriteValueAsStringreadValue方法,最終還是會交給JsonGenerator JsonParser 去處理,對此還有疑惑的話,可以去看看這兩個方法的源碼。
        本文為菠蘿大象原創(chuàng),如要轉(zhuǎn)載請注明出處。http://m.tkk7.com/bolo
    posted on 2014-04-16 15:48 菠蘿大象 閱讀(59351) 評論(1)  編輯  收藏 所屬分類: Java

    評論:
    # re: 使用jackson對Java對象與JSON字符串相互轉(zhuǎn)換的一些總結 2014-05-21 10:44 | 小人物_Amor
    大象寫東西寫的很全,很細致,學習了!  回復  更多評論
      
    主站蜘蛛池模板: 久视频精品免费观看99| 波多野结衣中文字幕免费视频| 久久亚洲国产午夜精品理论片| 午夜精品免费在线观看| 亚洲成A人片在线播放器| www.亚洲精品.com| 久久精品国产免费| 午夜在线a亚洲v天堂网2019 | 亚洲午夜精品一级在线播放放| 久久精品成人免费网站| 亚洲国产区男人本色| 亚洲精品卡2卡3卡4卡5卡区| 亚洲精品免费网站| 久久久久久久久久免免费精品| 亚洲国产成人精品电影| 久久伊人亚洲AV无码网站| 亚洲成在人线aⅴ免费毛片| 中文字幕成人免费高清在线| 国产亚洲福利在线视频| 国产亚洲av片在线观看播放| 永久黄网站色视频免费直播| 久久免费线看线看| 男女交性无遮挡免费视频| 亚洲嫩草影院在线观看| 亚洲一区二区三区香蕉| 国产精品国产自线拍免费软件| 久久99国产乱子伦精品免费| 一级毛片免费不卡直观看| 亚洲午夜无码久久久久小说| 亚洲午夜视频在线观看| 久久亚洲国产成人影院网站| 曰批全过程免费视频在线观看| 美女被cao网站免费看在线看| 国产成人综合亚洲绿色| 亚洲精品123区在线观看| 老汉色老汉首页a亚洲| 亚洲热线99精品视频| 亚洲精品国产精品国自产观看| 女人与禽交视频免费看| 免费看成人AA片无码视频羞羞网| a视频免费在线观看|