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学习

  • 相关阅读:
    多个类定义attr属性重复的问题:Attribute "xxx" has already been defined
    好用的批量改名工具——文件批量改名工具V2.0 绿色版
    得到ImageView中drawable显示的区域的计算方法
    得到view坐标的各种方法
    实现类似于QQ空间相册的点击图片放大,再点后缩小回原来位置
    Material Designer的低版本兼容实现(五)—— ActivityOptionsCompat
    Android 自带图标库 android.R.drawable
    解决 Attempting to destroy the window while drawing!
    解决Using 1.7 requires compiling with Android 4.4 (KitKat); currently using API 4
    Material Designer的低版本兼容实现(四)—— ToolBar
  • 原文地址:https://www.cnblogs.com/tonyq/p/7837367.html
Copyright © 2011-2022 走看看