zoukankan      html  css  js  c++  java
  • ObjectMapper 对象和json相互转换

    一、ObjectMapper

      ObjectMapper类是Jackson库的主要类。它提供一些功能将转换成Java对象匹配JSON结构,反之亦然。它使用JsonParser和JsonGenerator的实例实现JSON实际的读/写。

      maven依赖:

         <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>2.8.3</version>
            </dependency>

    二、代码

    package com.mmall.util;
    import com.google.common.collect.Lists;
    import com.mmall.pojo.User;
    import lombok.extern.slf4j.Slf4j;
    import org.apache.commons.lang3.StringUtils;
    import org.codehaus.jackson.map.DeserializationConfig;
    import org.codehaus.jackson.map.ObjectMapper;
    import org.codehaus.jackson.map.SerializationConfig;
    import org.codehaus.jackson.map.annotate.JsonSerialize;
    import org.codehaus.jackson.type.JavaType;
    import org.codehaus.jackson.type.TypeReference;
    import java.io.IOException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.List;
    /**
     * json转换工具类
     */
    @Slf4j
    public class JsonUtil {
    
        private static ObjectMapper objectMapper = new ObjectMapper();
        static {
            //将对象的所有字段全部列入
            objectMapper.setSerializationInclusion(JsonSerialize.Inclusion.ALWAYS);
    
            //取消默认转换timestamps形式,false使用日期格式转换,true不使用日期转换,结果是时间的数值157113793535
            objectMapper.configure(SerializationConfig.Feature.WRITE_DATE_KEYS_AS_TIMESTAMPS,false); //默认值true
    
            //忽略空Bean转json的错误
            objectMapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS,false);
    
            //所有的日期格式统一样式: yyyy-MM-dd HH:mm:ss
            objectMapper.setDateFormat(new SimpleDateFormat(DateTimeUtil.STANDARD_FORMAT));
    
            //忽略 在json字符串中存在,但是在对象中不存在对应属性的情况,防止错误。
            // 例如json数据中多出字段,而对象中没有此字段。如果设置true,抛出异常,因为字段不对应;false则忽略多出的字段,默认值为null,将其他字段反序列化成功
            objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_NULL_FOR_PRIMITIVES,false);
    
        }
    
        //将单个对象转换成json格式的字符串(没有格式化后的json)
        public static <T> String obj2String(T obj){
            if (obj == null){
                return null;
            }
            try {
                return obj instanceof String ? (String) obj:objectMapper.writeValueAsString(obj);
            } catch (IOException e) {
                log.warn("Parse object to String error", e);
                return null;
            }
        }
    
        //将单个对象转换成json格式的字符串(格式化后的json)
        public static <T> String obj2StringPretty(T obj){
            if (obj == null){
                return null;
            }
            try {
                return obj instanceof String ? (String) obj:objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);
            } catch (IOException e) {
                log.warn("Parse object to String error", e);
                return null;
            }
        }
        //将json形式的字符串数据转换成单个对象
        public static <T> T string2Obj(String str, Class<T> clazz){
            if (StringUtils.isEmpty(str) || clazz == null){
                return null;
            }
            try {
                return clazz.equals(String.class) ? (T) str : objectMapper.readValue(str,clazz);
            } catch (IOException e) {
                log.warn("Parse object to Object error", e);
                return null;
            }
        }
    
        //将json形式的字符串数据转换成多个对象
        public static <T> T string2Obj(String str, TypeReference<T> typeReference){
            if (StringUtils.isEmpty(str) || typeReference == null){
                return null;
            }
            try {
                return typeReference.getType().equals(String.class) ? (T) str : (T) objectMapper.readValue(str, typeReference);
            } catch (IOException e) {
                log.warn("Parse object to Object error", e);
                return null;
            }
        }
    
        //将json形式的字符串数据转换成多个对象
        public static <T> T string2Obj(String str, Class<T> collectionClass, Class<?>... elementClasses){
            JavaType javaType = objectMapper.getTypeFactory().constructParametricType(collectionClass,elementClasses);
            try {
                return objectMapper.readValue(str, javaType);
            } catch (IOException e) {
                log.warn("Parse object to Object error", e);
                return null;
            }
        }
    
        //测试
        public static void main(String[] args) {
    //        User user1 = new User();
    //        user1.setId(1);
    //        user1.setUsername("wangjun1");
    //        user1.setCreateTime(new Date());
    //        String user1JsonPretty = JsonUtil.obj2StringPretty(user1);
    //        log.info("user1JsonPretty:{}", user1JsonPretty);
    //        User user2 = new User();
    //        user2.setId(2);
    //        user2.setUsername("wangjun2");
    //
    //        String user1Json = JsonUtil.obj2String(user1);
    //
    //        String user1JsonPretty = JsonUtil.obj2StringPretty(user1);
    //
    //        log.info("user1Json:{}", user1Json);
    //
    //        log.info("user1JsonPretty:{}", user1JsonPretty);
    //
    //
    //        User user = JsonUtil.string2Obj(user1Json, User.class);
    //        System.out.println(user.getUsername());
    //
    //        List<User> userList = Lists.newArrayList();
    //        userList.add(user1);
    //        userList.add(user2);
    //
    //        String userListStr = JsonUtil.obj2StringPretty(userList);
    //
    //        log.info("==================");
    //        log.info(userListStr);
    //
    //        List<User> userListObj1 = JsonUtil.string2Obj(userListStr, new TypeReference<List<User>>() {
    //        });
    //        System.out.println(userListObj1);
    //
    //        List<User> userListObj2 = JsonUtil.string2Obj(userListStr,List.class,User.class);
    //        System.out.println(userListObj2);
    //        System.out.println("end");
        }
    }

     三、扩展

      利用对象转换json。可以做单点登录,将用户的信息转换为json数据,作为redis的value值;将用户的sessionid作为key,存储到redis中。

  • 相关阅读:
    Android OpenGL ES 2.0 (四) 灯光perfragment lighting
    Android OpenGL ES 2.0 (五) 添加材质
    冒泡排序函数
    javascript object 转换为 json格式 toJSONString
    Liunx CentOS 下载地址
    jquery 图片切换特效 鼠标点击左右按钮焦点图切换滚动
    javascript 解析csv 的function
    mysql Innodb Shutdown completed; log sequence number解决办法
    Centos 添加 yum
    javascript 键值转换
  • 原文地址:https://www.cnblogs.com/FondWang/p/11703197.html
Copyright © 2011-2022 走看看