<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 菠蘿大象 閱讀(59334) 評論(1)  編輯  收藏 所屬分類: Java

    評論:
    # re: 使用jackson對Java對象與JSON字符串相互轉換的一些總結 2014-05-21 10:44 | 小人物_Amor
    大象寫東西寫的很全,很細致,學習了!  回復  更多評論
      
    主站蜘蛛池模板: 夜夜爽免费888视频| 精品亚洲一区二区三区在线观看 | 亚洲AV无码成人网站久久精品大| 国产亚洲综合一区柠檬导航| 亚洲欧洲尹人香蕉综合| 亚洲AV无码国产一区二区三区| 久久九九免费高清视频| 美女视频黄的全免费视频网站| 亚洲区小说区图片区| 亚洲人成在久久综合网站| 中文字幕不卡高清免费| 成人免费无遮挡无码黄漫视频| 亚洲乳大丰满中文字幕| 鲁死你资源站亚洲av| mm1313亚洲精品无码又大又粗| 亚洲另类古典武侠| 97无码免费人妻超级碰碰夜夜| 91亚洲国产成人精品下载| xvideos永久免费入口| 最近免费中文字幕大全| 国产成人人综合亚洲欧美丁香花 | 91精品国产免费入口| 亚洲国产成人乱码精品女人久久久不卡| 亚洲精品视频在线观看视频| a毛片在线免费观看| xvideos亚洲永久网址| 黄 色一级 成 人网站免费| 久久久久久久久亚洲| www一区二区www免费| 免费国产在线观看| 亚洲日韩国产一区二区三区在线| 无码精品国产一区二区三区免费| 国产国拍亚洲精品福利 | 亚洲精品午夜国产VA久久成人| 久久久久久免费一区二区三区| 亚洲黄片手机免费观看| 日本高清免费观看| 亚洲国产精品人久久| 特级精品毛片免费观看| 亚洲精华国产精华精华液好用 | 国产92成人精品视频免费|