package com.yanzuoguang.util.helper; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.TypeReference; /** * JSON序列化的处理 * * @author 颜佐光 */ public class JsonHelper { /** * JSON对象开始标记 */ public static final String OBJECT_START_FLAG = "{"; /** * 将JSON字符串转化为JSON对象 * * @param from 来源对象,可以为JSON字符串 * @param type 对象的类型 * @param <T> 转换后的结果的类型 * @return 转换后的结果 * @throws Exception 转换结果发生异常 */ public static <T> T to(Object from, Class<T> type) { String json = serialize(from); return deserialize(json, type); } /** * 将JSON字符串转化为JSON对象 * * @param from 来源对象,可以为JSON字符串 * @param type 对象的类型 * @param <T> 转换后的结果的类型 * @return 转换后的结果 * @throws Exception 转换结果发生异常 */ public static <T> T to(Object from, TypeReference<T> type) { String json = serialize(from); return deserialize(json, type); } /** * 将JSON字符串转换为数组 * * @param from 来源对象,可以为JSON字符串 * @param type 转换的类型 * @param <T> 数组的类型 * @return 返回数组 */ public static <T> T toArray(Object from, TypeReference<T> type) { String json = serialize(from); return deserializeArray(json, type); } /** * 将JSON字符串转化为JSON对象 * * @param json JSON字符串 * @param type 对象的类型 * @param <T> 转换后的结果的类型 * @return 转换后的结果 * @throws Exception 转换结果发生异常 */ public static <T> T deserialize(String json, Class<T> type) { return JSON.parseObject(json, type); } /** * 将JSON字符串转化为JSON对象 * * @param json JSON字符串 * @param type 对象的类型 * @param <T> 转换后的结果的类型 * @return 转换后的结果 * @throws Exception 转换结果发生异常 */ public static <T> T deserialize(String json, TypeReference<T> type) { return JSON.parseObject(json, type); } /** * 将JSON字符串转换为数组 * * @param json 需要转换的JSON * @param type 转换的类型 * @param <T> 数组的类型 * @return 返回数组 */ public static <T> T deserializeArray(String json, TypeReference<T> type) { if (json == null || json.length() < 1) { return null; } json = json.trim(); if (json.startsWith(OBJECT_START_FLAG)) { json = String.format("[%s]", json); } return JSON.parseObject(json, type); } /** * 将对象序列化成JSON * * @param value 需要序列化的对象 * @return JSON结果 * @throws Exception 抛出的异常信息 */ public static String serialize(Object value) { return JSON.toJSONString(value); } /** * 将对象序列化成JSON * * @param value 需要序列化的对象 * @param isLine 是否需要换行 * @return JSON结果 * @throws Exception 抛出的异常信息 */ public static String serialize(Object value, boolean isLine) { return JSON.toJSONString(value, isLine); } /** * JSON对比对象值 * * @param from 来源对象 * @param to 目标对象 * @return 对比结果 */ public static boolean compare(Object from, Object to) { return StringHelper.compare( JsonHelper.serialize(from), JsonHelper.serialize(to), false); } }