zoukankan      html  css  js  c++  java
  • JackSon框架解析Json

    一、简介

      Jackson解析的速度算是同类框架中最快的,同时也是Spring MVC中内置使用的解析方式

      Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。相比json-lib框架,Jackson所依赖的jar包较少,简单易用并且性能也要相对高些。

    二、JackSon的使用

      Jackson提供了很多类和方法,而在序列化和反序列化中使用的最多的类则是ObjectMapper这个类,此类比较类似于Json-lib中JsonObject和ArrayObject。此类中提供了readTree(),readValue(),writeValueAsString()等方法用于转换。具体关于此类的说明文档地址是:http://tool.oschina.net/uploads/apidocs/jackson-1.9.9/org/codehaus/jackson/map/ObjectMapper.html

      下面中所涉及到的objectMapper均是来至于ObjectMapper objectMapper = new ObjectMapper()。

    1、导入jar包

    //maven公共直接导入依赖
    <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency>

    2、创建Object类

    /*例如创建一个雇员类*/
    public
    class Employee { private int id; private String name; private int age;
     ...省略getter、setter
    }

     Json格式的文件data.json如下:

    {
    "id" : 123,
    "name" : "Henry Smith",
    "age" : 28,
    "salary" : 2000
    }

    1、通过文件将Json与对象相互转换

    public void testJsonToObject() throws JsonParseException, JsonMappingException, IOException{
            ObjectMapper objectMapper = new ObjectMapper();
         //将json格式数据从文件读入,并转换为对象 Employee emp
    = objectMapper.readValue(new File("src/data.json"), Employee.class); System.out.println(emp.toString()); } public void testObjectTojson() throws JsonParseException, JsonMappingException, IOException{ ObjectMapper objectMapper = new ObjectMapper(); Employee emp = objectMapper.readValue(new File("src/data.json"), Employee.class); //将对象转化为json格式,并存入到文件中 objectMapper.writeValue(new File("src/data1.json"), emp); //将对象转化为json格式数据,并输出到控制台上 objectMapper.writeValue(System.out, emp);

    2、通过I/O流将Json与对象相互转换

    public void testInputStream() throws JsonParseException, JsonMappingException, IOException{
         //创建ObjectMapper对象 ObjectMapper objectMapper
    = new ObjectMapper();
         //将json格式数据从文件读入,并转换为对象 Employee emp
    = objectMapper.readValue(new FileInputStream("src/data.json"), Employee.class); System.out.println(emp.toString()); }

    public void testOutPutStream() throws JsonParseException, JsonMappingException, IOException{ ObjectMapper objectMapper = new ObjectMapper(); Employee emp = objectMapper.readValue(new File("src/data.json"), Employee.class); //将对象转化为json格式,并存入到文件中 objectMapper.writeValue(new FileOutputStream("src/data1.json"), emp);

     3、从URL中读取数据(若URL返回的满足Employee类的json数据)

    Employee emp1 = objectMapper.readValue("http://www.xxx.com/xxx", Employee.class);
    JsonNode jsonNode = objectMapper.readTree("http://www.xxx.com/xxx");

    4、常用方法

      可通过ObjectMapper类实现Json格式数据与Object转换

    类ObjectMapper:此映射器(或数据绑定器或编解码器)提供了在Java对象(JDK提供的核心类,bean的实例)和匹配的JSON构造之间进行转换的功能。它将使用JsonParserJsonGenerator 实现JSON的实际读/写实例。

    <T>T    readValue(File src, Class<T> valueType) 

    <T>T    readValue(InputStream src, Class<T> valueType)

    JsonNode  readTree(URL source)将JSON内容反序列化为使用JsonNode实例集表示的树的方法

    void    writeValue(File resultFile, Object value)将Object输出为JSON到File文件中

    void    writeValue(OutputStream out, Object value)

    void    writeValue(Writer w, Object value)

    String   writeValueAsString(Object value)可用于将任何Java值序列化为String的方法。

    TypeFactory  getTypeFactory()用于获取当前配置TypeFactory实例的访问器。

    类TypeFactory:final修饰,从Jackson 1.8开始,JavaType给定各种输入时用于创建具体实例的类。应该使用通过ObjectMapper(并通过DeserializationConfig和 公开 SerializationConfig)配置的实例来完成使用

    JavaType  constructParametricType(Class<?> parametrized, Class<?>... parameterClasses)用于构造的工厂方法JavaType表示参数化类型。

    JavaType  constructParametricType(Class<?> parametrized, JavaType... parameterTypes)用于构造的工厂方法JavaType表示参数化类型。

    更多ObjectMapper的API详见:http://tool.oschina.net/uploads/apidocs/jackson-1.9.9/org/codehaus/jackson/map/ObjectMapper.html

     更多TypeFactory的API详见:http://tool.oschina.net/uploads/apidocs/jackson-1.9.9/org/codehaus/jackson/map/type/TypeFactory.html

     代码实例,可抽取为JsonUtils

    package com.example;
    
    import java.util.List;
    
    import com.fasterxml.jackson.core.JsonProcessingException;
    import com.fasterxml.jackson.databind.JavaType;
    import com.fasterxml.jackson.databind.ObjectMapper;
    
    /**
     * 
     */
    public class JsonUtils {
    
        // 定义jackson对象
        private static final ObjectMapper MAPPER = new ObjectMapper();
    
        /**
         * 将对象转换成json字符串。
         * <p>Title: pojoToJson</p>
         * <p>Description: </p>
         * @param data
         * @return
         */
        public static String objectToJson(Object data) {
            try {
                String string = MAPPER.writeValueAsString(data);
                return string;
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
            return null;
        }
        
        /**
         * 将json结果集转化为对象
         * 
         * @param jsonData json数据
         * @param clazz 对象中的object类型
         * @return
         */
        public static <T> T jsonToPojo(String jsonData, Class<T> beanType) {
            try {
                T t = MAPPER.readValue(jsonData, beanType);
                return t;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
        
        /**
         * 将json数据转换成pojo对象list
         * <p>Title: jsonToList</p>
         * <p>Description: </p>
         * @param jsonData
         * @param beanType
         * @return
         */
        public static <T>List<T> jsonToList(String jsonData, Class<T> beanType) {
            JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType);
            try {
                List<T> list = MAPPER.readValue(jsonData, javaType);
                return list;
            } catch (Exception e) {
                e.printStackTrace();
            }
            
            return null;
        }
        
    }
    View Code
  • 相关阅读:
    引用 struts2标签详解
    Java 中日期的计算
    在一个FORM中实现多个ACTION动作
    java.lang.OutOfMemoryError: PermGen space最好的解决方法
    Java实现和栈的应用举例
    Java的自动装箱和拆箱
    oracle11g更改字符集AL32UTF8为ZHS16GBK
    设计的臭味
    OOD设计五个原则
    推荐JQuery学习简介
  • 原文地址:https://www.cnblogs.com/turbosha/p/9960432.html
Copyright © 2011-2022 走看看