zoukankan      html  css  js  c++  java
  • 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学习

  • 相关阅读:
    吴恩达《深度学习》第四门课(4)特殊应用:人脸识别和神经风格迁移
    吴恩达《深度学习》第四门课(3)目标检测(Object detection)
    经典算法详解(12)分解质因数
    吴恩达《深度学习》第四门课(2)卷积神经网络:实例探究
    经典算法详解(11)递归查找数组中的最大值
    吴恩达《深度学习》第四门课(1)卷积神经网络
    经典算法详解(10)图中有多少个三角形
    吴恩达《深度学习》第三门课(2)机器学习策略二
    数据结构与算法——备用2(十)
    数据结构与算法——查找算法(八)
  • 原文地址:https://www.cnblogs.com/tonyq/p/7837367.html
Copyright © 2011-2022 走看看