Jackson将json字符串转换成泛型List

Jackson,我感觉是在Java与Json之间相互转换的最快速的框架,当然Google的Gson也很不错,但是参照网上有人的性能测试,看起来还是Jackson比较快一点

    Jackson处理一般的JavaBean和Json之间的转换只要使用ObjectMapper 对象的readValue和writeValueAsString两个方法就能实现。但是如果要转换复杂类型Collection如 List<YourBean>,那么就需要先反序列化复杂类型 为泛型的Collection Type。

如果是ArrayList<YourBean>那么使用ObjectMapper 的getTypeFactory().constructParametricType(collectionClass, elementClasses);

如果是HashMap<String,YourBean>那么 ObjectMapper 的getTypeFactory().constructParametricType(HashMap.class,String.class, YourBean.class);

 

 

复制代码
 1     public final ObjectMapper mapper = new ObjectMapper(); 
 2      
 3     public static void main(String[] args) throws Exception{  
 4         JavaType javaType = getCollectionType(ArrayList.class, YourBean.class); 
 5         List<YourBean> lst =  (List<YourBean>)mapper.readValue(jsonString, javaType); 
 6     }   
 7        /**   
 8         * 获取泛型的Collection Type  
 9         * @param collectionClass 泛型的Collection   
10         * @param elementClasses 元素类   
11         * @return JavaType Java类型   
12         * @since 1.0   
13         */   
14     public static JavaType getCollectionType(Class<?> collectionClass, Class<?>... elementClasses) {   
15         return mapper.getTypeFactory().constructParametricType(collectionClass, elementClasses);   
16     }   
复制代码

 





其他相关的:

[java]  view plain  copy
  1. JavaType javaType = TypeFactory.defaultInstance()  
  2.     constructParametrizedType(Page.class,Page.class, CustomerDTO.class);  
  3. Page<CustomerDTO> list = JsonUtil.om().readValue(res, javaType);  

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public class JsonUtil {  
  2.     /** 
  3.      * 返回mapper,忽略未知参数、使用long解析时间 
  4.      *  
  5.      * @return 
  6.      */  
  7.     public static ObjectMapper om() {  
  8.         ObjectMapper mapper = new ObjectMapper();  
  9.         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,  
  10.                 false);  
  11.         mapper.configure(  
  12.                 DeserializationFeature.READ_DATE_TIMESTAMPS_AS_NANOSECONDS,  
  13.                 true);  
  14.         return mapper;  
  15.     }  
  16. }  

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值