<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之間相互轉換的心得。
        jackson是一個用Java編寫的,用來處理JSON格式數據的類庫,它速度非常快,目前來看使用很廣泛,逐漸替代了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方法現在很多都已經被標注為@Deprecated了,因此請大家使用上面的方式處理。
        SerializationConfig.Feature枚舉里面還有很多其它的設置項,比如日期,比如要不要輸出null值等等。其它的還有:
            org.codehaus.jackson.JsonGenerator.Feature.* 
            org.codehaus.jackson.JsonParser.Feature.*
        讓我們來看看輸出結果,兩次轉換之后,打印出來的字符串應該是一樣的:
        
        OK,果然結果是一致的,大家現在應該會使用jackson進行JavaJson的互相轉換了吧?恩,現在再考慮一種情況,如果想將List<User>JSON字符串反轉為泛型,應該怎么做呢?
        想這樣:mapper.readValue(json, List<User>.class)?這可是錯誤的,這里的參數是Class<T> valueTypevalueTypeClass<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,先調用writeValueAsString方法打印出json,再調用readJson方法,這不僅可以轉換泛型List<T>,還可以用于其它集合,比如Map<K,V>等等。
        List<User> list = readJson(json, List.class, User.class); 
        ObjectMapper可以讓對象與JSON之間相互轉換,除此之外Jackson還提供了JsonGenerator JsonParser 這兩個類,它們可以更細粒度的處理序列化與反序列化。調用ObjectMapperwriteValueAsStringreadValue方法,最終還是會交給JsonGenerator JsonParser 去處理,對此還有疑惑的話,可以去看看這兩個方法的源碼。
        本文為菠蘿大象原創,如要轉載請注明出處。http://www.tkk7.com/bolo
    posted on 2014-04-16 15:48 菠蘿大象 閱讀(59335) 評論(1)  編輯  收藏 所屬分類: Java

    評論:
    # re: 使用jackson對Java對象與JSON字符串相互轉換的一些總結 2014-05-21 10:44 | 小人物_Amor
    大象寫東西寫的很全,很細致,學習了!  回復  更多評論
      
    主站蜘蛛池模板: 日本一区二区三区日本免费| 中国国语毛片免费观看视频| 99热精品在线免费观看| 久久激情亚洲精品无码?V| 国产成人人综合亚洲欧美丁香花 | 国产AV无码专区亚洲AV男同| 粉色视频在线观看www免费| 性一交一乱一视频免费看| 在线精品亚洲一区二区| 最新免费jlzzjlzz在线播放| 国产精品亚洲综合五月天| 久久久久久亚洲精品无码| 成人a免费α片在线视频网站| 亚洲GV天堂GV无码男同| 免费亚洲视频在线观看| 特级做a爰片毛片免费看| a视频在线免费观看| 日韩一卡2卡3卡4卡新区亚洲 | 亚洲一级片免费看| 国产亚洲精品福利在线无卡一| a级毛片免费播放| 亚洲人成在线影院| 亚洲免费人成视频观看| 精品国产成人亚洲午夜福利| 在线观看免费毛片| 免费人成视频在线观看免费| 色噜噜AV亚洲色一区二区| 无码国产精品一区二区免费3p| 中中文字幕亚洲无线码| 免费看一级做a爰片久久| 中文字幕的电影免费网站| 婷婷亚洲综合五月天小说| 国产乱子精品免费视观看片| 亚洲AV日韩综合一区| 亚洲情侣偷拍精品| 永久看日本大片免费35分钟| 亚洲精品无码久久久久牙蜜区| 亚洲中久无码不卡永久在线观看| 免费A级毛片无码A∨| 亚洲精品无码日韩国产不卡av| 2048亚洲精品国产|