jackson将JSON字符串转换成复杂的数据类型

本文详细介绍了一种利用Java ObjectMapper将JSON字符串转换为Java Bean的方法,包括List<Map>和Map类型的转换实例,提供了实用的代码示例和GitHub源码链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    private static ObjectMapper objectMapper = new ObjectMapper();
   /**
     * 示例1:
     *         List<Map<Integer, String>> list = Lists.newArrayList();
     *         Map<Integer, String> map = Maps.newHashMap();
     *         map.put(12, "gg");
     *         map.put(34, "sd");
     *         list.add(map);
     *         List<Map<Integer, String>> list1 = toJavaBean(JSONUtils.toJSONString(list), ArrayList.class, HashMap.class);
     * 示例2:
     *         Map<Integer, String> map = Maps.newHashMap();
     *         map.put(12, "gg");
     *         map.put(34, "sd");
     *         Map<Integer, String> map1 = toJavaBean(JSONUtils.toJSONString(map), HashMap.class, Integer.class, String.class);
     * @param jsonString JSON字符串
     * @param parametrized 数据类型最外层class或者泛型实际的class, 如List<Map<String, Integer>>的List.class 或者Map<String, Integer>中的Map.class
     * @param parameterClasses 参数内部类型,如List<Map<String, Object>中的Map.class 或者Map<String, Integer>中的String.class、Integer.class
     * @param <T>
     * @return
     */
    public static <T> T toJavaBean(String jsonString, Class<?> parametrized, Class<?>... parameterClasses){
        try{
            JavaType javaType = javaType(parametrized, parameterClasses);
            return objectMapper.readValue(jsonString, javaType);
        } catch (JsonParseException e){
            e.printStackTrace();
            LoggerUtil.error(JSONUtils.class, e.toString());
        } catch (JsonMappingException e){
            e.printStackTrace();
            LoggerUtil.error(JSONUtils.class, e.toString());
        } catch (IOException e){
            e.printStackTrace();
            LoggerUtil.error(JSONUtils.class, e.toString());
        }
        return null;
    }
    /**
     *  示例1:
     *  Map<Integer, String> map = Maps.newHashMap();
     *  JavaType javaType = javaType(Map.class, Integer.class, String.class);
     *  示例2:
     *   List<Map<Integer, String>> list = Lists.newArrayList();
     *   Map<Integer, String> map = Maps.newHashMap();
     *   map.put(12, "gg");
     *   map.put(34, "sd");
     *   list.add(map);
     *   JavaType javaType = javaType(List.class, Map.class);
     * @param parametrized 实际的数据类型,即最外层数据类型List
     * @param parameterClasses 内部参数类型,即Set.class Bean.class
     * @return
     */
    public static JavaType javaType(Class<?> parametrized, Class<?>... parameterClasses){
        return objectMapper.getTypeFactory().constructParametricType(parametrized, parameterClasses);
    }

上面只列出了工具包的部分代码,其它的可以参考我的源码;
GitHub源码地址:https://github.com/mingyang66/spring-parent

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值