• Java中常见的json序列化类库


    Jackson 介绍

    Jackson框架是基于Java平台的一套数据处理工具,被称为“最好的Java Json解析器”。
    Jackson框架包含了3个核心库:streaming,databind,annotations。

    Jackson Home Page:https://github.com/FasterXML/jackson
    Jackson Wiki:http://wiki.fasterxml.com/JacksonHome
    Jackson doc: https://github.com/FasterXML/jackson-docs
    Jackson Download Page:http://wiki.fasterxml.com/JacksonDownload

    Jackson可以做什么

    xml、csv和java对象互转

    Jackson的使用

    Jackson提供了三种可选的Json处理方法:流式API(Streaming API) 、树模型(Tree Model)、数据绑定(Data Binding)。

    从使用角度来看,比较一下这三种处理Json的方式的特性:
    Streaming API:是效率最高的处理方式(开销低、读写速度快,但程序编写复杂度高)
    Tree Model:是最灵活的处理方式
    Data Binding:是最常用的处理方式

    Jacson常用配置选项

    /**序列化配置*/
    ObjectMapper mapper = new ObjectMapper();  
    // 设置日期处理格式
    SimpleDateFormat dateFormat = new SimpleDateFormat(“yyyy-MM-dd”);  
    mapper.setDateFormat(dateFormat);  
    // 美化json输出
    mapper.configure(SerializationFeature.INDENT_OUTPUT, true); 
    //忽略空属性
    mapper.setSerializationInclusion(Include.NON_EMPTY);  
    
    /**反序列化配置*/
    ObjectMapper mapper = new ObjectMapper();
    mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); 
    

    常见问题

    1. json字符串转java对象,json中存在一个字段,但java对象中没有该字段,会抛出UnrecognizedPropertyException

    mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

    package test.json;  
      
    import java.io.Serializable;  
      
    import org.apache.commons.lang.builder.ToStringBuilder;  
    import org.junit.Test;  
      
    import com.fasterxml.jackson.databind.DeserializationFeature;  
    import com.fasterxml.jackson.databind.ObjectMapper;  
      
    public class TestJson {  
          
        @Test  
        public void jsonToClass() {  
            String s = "{"id":1,"name":"test","flag":true,"age":19}";  
              
            ObjectMapper mapper = new ObjectMapper();  
            mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);  
            TE t;  
            try {  
                t = mapper.readValue(s, TE.class);  
                System.out.println(ToStringBuilder.reflectionToString(t));  
            } catch (Exception e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            }  
        }  
    }  
      
    class TE implements Serializable {  
          
        /** 
         *  
         */  
        private static final long serialVersionUID = 1L;  
        private long id;  
        private String name;  
        private boolean flag;  
        //private int age;  
          
        public long getId() {  
            return id;  
        }  
        public void setId(long id) {  
            this.id = id;  
        }  
        public String getName() {  
            return name;  
        }  
        public void setName(String name) {  
            this.name = name;  
        }  
        public boolean isFlag() {  
            return flag;  
        }  
        public void setFlag(boolean flag) {  
            this.flag = flag;  
        }  
        /*public int getAge() { 
            return age; 
        } 
        public void setAge(int age) { 
            this.age = age; 
        }*/  
          
    } 
    

    参考

    JackSon fasterxml学习

  • 相关阅读:
    prev()方法使用的注意点
    JS 获取图片的高度
    渐变色
    JS获取时间
    监听鼠标上下滚动事件
    几种常见的边框样式
    左侧导航背景颜色随机变化
    apache开启gzip压缩
    dedecms在linux上安装提示没权限解决办法
    阿里云centos7.3安装lamp环境
  • 原文地址:https://www.cnblogs.com/tonyq/p/7837367.html
Copyright © 2020-2023  润新知