Json data exchange a Jackson

rely

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

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

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.9.5</version>
</dependency>

Configuration


        //序列化的时候序列对象的所有属性  (默认)
        objectMapper.setSerializationInclusion(Include.ALWAYS);  

        //反序列化的时候如果多了其他属性,不抛出异常  
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);  

        //如果是空对象的时候,不抛异常  
        objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);  

        //取消时间的转化格式,默认是时间戳,同时需要设置要表现的时间格式  
        objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);  
        objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));

Basic use

ObjectMapper是JSON操作的核心,Jackson的所有JSON操作都是在ObjectMapper中实现。 
ObjectMapper有多个JSON序列化的方法,可以把JSON字符串保存File、OutputStream等不同的介质中。 

         writeValue(File arg0, Object arg1)把arg1转成json序列,并保存到arg0文件中。
 
         writeValue(OutputStream arg0, Object arg1)把arg1转成json序列,并保存到arg0输出流中。
 
         byte[] bytes = writeValueAsBytes(Object arg0)把arg0转成json序列,并把结果输出成字节数组。 

         String text = writeValueAsString(Object arg0)把arg0转成json序列,并把结果输出成字符串。 
          

        ObjectMapper mapper = new ObjectMapper();  
          
        //User对象类转JSON  
        //输出结果:{"name":"小民","age":20,"birthday":844099200000,"email":"[email protected]"}  
        String json = mapper.writeValueAsString(user);  
          
        //Java集合转JSON  
        //输出结果:[{"name":"小民","age":20,"birthday":844099200000,"email":"[email protected]"}]  
        List<User> users = new ArrayList<User>();  
        users.add(user);  
        String jsonlist = mapper.writeValueAsString(users);  

        ObjectMapper支持从byte[]、File、InputStream、字符串等数据的JSON反序列化。 
        ObjectMapper mapper = new ObjectMapper();  
        User user = mapper.readValue(json, User.class); 

Map collection

除了使用Java类进行映射之外,我们还可以直接使用Map和List等Java集合组织JSON数据
Map<String, Object> map = mapper.readValue(text, new TypeReference<Map<String, Object>>() {});

JSON comment


@JsonIgnore 此注解用于属性上,作用是进行JSON操作时忽略该属性。

@JsonFormat 此注解用于属性上,作用是把Date类型直接转化为想要的格式,如@JsonFormat(pattern = "yyyy-MM-dd HH-mm-ss")。

@JsonProperty 此注解用于属性上,作用是把该属性的名称序列化为另外一个名称,如把trueName属性序列化为name,如@JsonProperty("name")。

Bean Tools

/**
 * bean转json格式或者json转bean格式, 项目中我们通常使用这个工具类进行json---java互相转化
 */
public class JacksonUtil {
    private static ObjectMapper mapper = new ObjectMapper();
 
    public static String bean2Json(Object obj) throws IOException {
        StringWriter sw = new StringWriter();
        JsonGenerator gen = new JsonFactory().createJsonGenerator(sw);
        mapper.writeValue(gen, obj);
        gen.close();
        return sw.toString();
    }
 
    public static <T> T json2Bean(String jsonStr, Class<T> objClass)
            throws JsonParseException, JsonMappingException, IOException {
        return mapper.readValue(jsonStr, objClass);
    }
}

Guess you like

Origin www.cnblogs.com/loveer/p/11355060.html