Json数据交换一Jackson

欢迎光临我的博客[http://poetize.cn],前端使用Vue2,聊天室使用Vue3,后台使用Spring Boot

依赖

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

配置


        //序列化的时候序列对象的所有属性  (默认)
        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"));

基本使用

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":"xiaomin@sina.com"}  
        String json = mapper.writeValueAsString(user);  
          
        //Java集合转JSON  
        //输出结果:[{"name":"小民","age":20,"birthday":844099200000,"email":"xiaomin@sina.com"}]  
        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); 

集合的映射

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

JSON注解


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

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

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

Bean工具类

/**
 * 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);
	}
}
posted @ 2019-08-14 22:16  LittleDonkey  阅读(426)  评论(0编辑  收藏  举报