JsonUtil对象与json互转

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JsonUtil对象与json互转相关的知识,希望对你有一定的参考价值。

OrderDto orderDto = JsonUtil.json2Object(json,
     new TypeRef<OrderDto>() {
     });

 

 

package com.sf.module.bspcommon.util.json;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.TimeZone;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.sf.module.bspcommon.util.JsonException;

/**
 * 描述:JsonUtil工具类
 * 
 * <pre>
 * HISTORY
 * ****************************************************************************
 *  ID   DATE           PERSON          REASON
 *  1    2015年3月7日      sfit0250         Create
 * ****************************************************************************
 * </pre>
 * 
 * @author sfit0250
 * @since 1.0
 */
public class JsonUtil {

	private static Logger logger = LoggerFactory.getLogger(JsonUtil.class);

	private static final ObjectMapper objectMapper;
	/** 格式化时间的string */
	private static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
	static {
		objectMapper = new ObjectMapper();
		// 去掉默认的时间戳格式
		objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
		// 设置为中国北京时区
		objectMapper.setTimeZone(TimeZone.getTimeZone("GMT+8"));
		objectMapper.configure(SerializationFeature.WRITE_NULL_MAP_VALUES, false);
		// 空值不序列化
		objectMapper.setSerializationInclusion(Include.NON_NULL);
		// 反序列化时,属性不存在的兼容处理
		objectMapper.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);

		// 序列化时,日期的统一格式
		objectMapper.setDateFormat(new SimpleDateFormat(DATE_TIME_FORMAT));

		objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
		objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
		// 单引号处理
		objectMapper.configure(com.fasterxml.jackson.core.JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
	}

	/**
	 * json 转换成 Object
	 * 
	 * @param json
	 * @param clazz
	 * @return
	 */
	public static <T> T json2Object(String json, Class<T> clazz) {
		try {
			return objectMapper.readValue(json, clazz);
		} catch (IOException e) {
			logger.error("", e);
			throw new RuntimeException("解析json错误");
		}
	}

	public static <T> T json2Object(String json, TypeRef<T> tr) {
		try {
			return (T)objectMapper.readValue(json, tr.getType());
		} catch (IOException e) {
			logger.error("", e);
			throw new RuntimeException("解析json错误", e);
		}
	}

	/**
	 * obj 转换成json
	 * 
	 * @param entity
	 * @return
	 */
	public static <T> String object2Json(T entity) {
		try {
			return objectMapper.writeValueAsString(entity);
		} catch (IOException e) {
			logger.error("", e);
			throw new RuntimeException("转换json错误");
		}
	}

	/**
	 * obj对象 转换成树型JSON
	 * 
	 * @param obj
	 * @return
	 */
	public static JsonNode object2TreeJson(Object obj) {
		try {
			return objectMapper.valueToTree(obj);
		} catch (Exception e) {
			logger.error("", e);
			throw new RuntimeException("转换json错误");
		}
	}

	
	  /**
     * 解码json串成对象
     * 
     * @param <T>
     * @param json
     * @param valueType
     * @return T
     */
    @SuppressWarnings("unchecked")
    public static <T> T decode(String json, Class<?> valueType) {
        try {
            return (T) objectMapper.readValue(json, valueType);
        } catch (Exception e) {
            throw new JsonException(json, e);
        }
    }
	// /**
	// * 对象转换JSON 忽略指定属性
	// * @param obj
	// * @param pros 忽略属性名
	// * @return
	// */
	// public static String object2JsonIgnoreProperties(Object obj, String...
	// pros) {
	// try {
	// FilterProvider filters = new SimpleFilterProvider().addFilter(obj
	// .getClass().getName(), SimpleBeanPropertyFilter
	// .filterOutAllExcept(pros));
	// objectMapper.setFilters(filters);
	// objectMapper.setAnnotationIntrospector(new
	// JacksonAnnotationIntrospector() {
	// private static final long serialVersionUID = 1L;
	//
	// public Object findFilterId(AnnotatedClass ac) {
	// return ac.getName();
	// }
	// });
	// return objectMapper.writeValueAsString(obj);
	// } catch (Exception e) {
	// log.error(e);
	// throw new RuntimeException("转换json错误");
	// }
	// }



}

 

以上是关于JsonUtil对象与json互转的主要内容,如果未能解决你的问题,请参考以下文章

JSONUtil(JAVA对象/List与json互转,xml与json互转)

利用Jackson封装常用JsonUtil工具类

json对象与字符串互转

[JS]Javascript对象与JSON的互转

json 对象 与 json 字符串 互转

XML对象与json对象互转