<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://www.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
    大象寫東西寫的很全,很細致,學習了!  回復  更多評論
      
    主站蜘蛛池模板: 久久不见久久见免费影院| 日美韩电影免费看| 91免费精品国自产拍在线不卡| 一区二区无码免费视频网站| 亚洲视频手机在线| 一道本在线免费视频| 99国产精品免费视频观看| 亚洲精品少妇30p| 亚洲区日韩精品中文字幕| 精品无码国产污污污免费| 亚洲av无码一区二区三区在线播放 | 精品亚洲AV无码一区二区三区| 69视频免费观看l| 亚洲一卡2卡4卡5卡6卡在线99| 中文字幕无码不卡免费视频| 亚洲人成无码网站在线观看| 免费无码又爽又刺激毛片| 黄色毛片免费网站| 免费AA片少妇人AA片直播| 亚洲熟妇自偷自拍另欧美| 国产又大又长又粗又硬的免费视频| 香蕉视频在线观看亚洲| 最近中文字幕高清免费中文字幕mv | jyzzjyzz国产免费观看| 亚洲精品亚洲人成人网| 亚洲大片免费观看| 亚洲国产成人久久综合碰| 国产乱子伦精品免费视频| 亚洲日韩区在线电影| XXX2高清在线观看免费视频| 亚洲日韩aⅴ在线视频| 1a级毛片免费观看| 最新亚洲人成无码网站| 一个人免费观看视频www| 牛牛在线精品观看免费正| 久久精品国产亚洲av麻| 成人片黄网站色大片免费| 亚洲欧洲自拍拍偷午夜色| 久久福利青草精品资源站免费| 亚洲熟妇少妇任你躁在线观看无码 | 一级黄色毛片免费看|