google的gson和阿里巴巴的fastjson,为啥把有关联实体转json就会报错啊,说缺少字段啥乱七八糟的。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了google的gson和阿里巴巴的fastjson,为啥把有关联实体转json就会报错啊,说缺少字段啥乱七八糟的。相关的知识,希望对你有一定的参考价值。
第一个是阿里巴巴的转换,第二个是google的转换,不知道为什么会报错,我分别测试一下,贴出错误给大家看看
List<AppUser> 里面肯定是有值的,这个不用怀疑
这个是用阿里巴巴时候报的错误
这个是用google时候的错误
Gson/Jackson/FastJson工具类
import java.util.ArrayList; import java.util.List; import java.util.Map; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonParser; import com.google.gson.reflect.TypeToken; public class GsonUtil { //不用创建对象,直接使用Gson.就可以调用方法 private static Gson gson = null; //判断gson对象是否存在了,不存在则创建对象 static { if (gson == null) { //gson = new Gson(); //当使用GsonBuilder方式时属性为空的时候输出来的json字符串是有键值key的,显示形式是"key":null,而直接new出来的就没有"key":null的 gson= new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create(); } } //无参的私有构造方法 private GsonUtil() { } /** * 将对象转成json格式 * * @param object * @return String */ public static String GsonString(Object object) { String gsonString = null; if (gson != null) { gsonString = gson.toJson(object); } return gsonString; } /** * 将json转成特定的cls的对象 * * @param gsonString * @param cls * @return */ public static <T> T GsonToBean(String gsonString, Class<T> cls) { T t = null; if (gson != null) { //传入json对象和对象类型,将json转成对象 t = gson.fromJson(gsonString, cls); } return t; } /** * json字符串转成list * * @param gsonString * @param cls * @return */ public static <T> List<T> GsonToList(String gsonString, Class<T> cls) { List<T> list = null; if (gson != null) { //根据泛型返回解析指定的类型,TypeToken<List<T>>{}.getType()获取返回类型 list = gson.fromJson(gsonString, new TypeToken<List<T>>() { }.getType()); } return list; } /** * json字符串转成list中有map的 * * @param gsonString * @return */ public static <T> List<Map<String, T>> GsonToListMaps(String gsonString) { List<Map<String, T>> list = null; if (gson != null) { list = gson.fromJson(gsonString, new TypeToken<List<Map<String, T>>>() { }.getType()); } return list; } /** * json字符串转成map的 * * @param gsonString * @return */ public static <T> Map<String, T> GsonToMaps(String gsonString) { Map<String, T> map = null; if (gson != null) { map = gson.fromJson(gsonString, new TypeToken<Map<String, T>>() { }.getType()); } return map; } }
public class JacksonUtils { private final static ObjectMapper objectMapper = new ObjectMapper(); private JacksonUtils() { } public static ObjectMapper getInstance() { return objectMapper; } /** * javaBean、列表数组转换为json字符串 */ public static String obj2json(Object obj) throws Exception { return objectMapper.writeValueAsString(obj); } /** * javaBean、列表数组转换为json字符串,忽略空值 */ public static String obj2jsonIgnoreNull(Object obj) throws Exception { ObjectMapper mapper = new ObjectMapper(); mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); return mapper.writeValueAsString(obj); } /** * json 转JavaBean */ public static <T> T json2pojo(String jsonString, Class<T> clazz) throws Exception { objectMapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true); return objectMapper.readValue(jsonString, clazz); } /** * json字符串转换为map */ public static <T> Map<String, Object> json2map(String jsonString) throws Exception { ObjectMapper mapper = new ObjectMapper(); mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); return mapper.readValue(jsonString, Map.class); } /** * json字符串转换为map */ public static <T> Map<String, T> json2map(String jsonString, Class<T> clazz) throws Exception { Map<String, Map<String, Object>> map = objectMapper.readValue(jsonString, new TypeReference<Map<String, T>>() { }); Map<String, T> result = new HashMap<String, T>(); for (Map.Entry<String, Map<String, Object>> entry : map.entrySet()) { result.put(entry.getKey(), map2pojo(entry.getValue(), clazz)); } return result; } /** * 深度转换json成map * * @param json * @return */ public static Map<String, Object> json2mapDeeply(String json) throws Exception { return json2MapRecursion(json, objectMapper); } /** * 把json解析成list,如果list内部的元素存在jsonString,继续解析 * * @param json * @param mapper 解析工具 * @return * @throws Exception */ private static List<Object> json2ListRecursion(String json, ObjectMapper mapper) throws Exception { if (json == null) { return null; } List<Object> list = mapper.readValue(json, List.class); for (Object obj : list) { if (obj != null && obj instanceof String) { String str = (String) obj; if (str.startsWith("[")) { obj = json2ListRecursion(str, mapper); } else if (obj.toString().startsWith("{")) { obj = json2MapRecursion(str, mapper); } } } return list; } /** * 把json解析成map,如果map内部的value存在jsonString,继续解析 * * @param json * @param mapper * @return * @throws Exception */ private static Map<String, Object> json2MapRecursion(String json, ObjectMapper mapper) throws Exception { if (json == null) { return null; } Map<String, Object> map = mapper.readValue(json, Map.class); for (Map.Entry<String, Object> entry : map.entrySet()) { Object obj = entry.getValue(); if (obj != null && obj instanceof String) { String str = ((String) obj); if (str.startsWith("[")) { List<?> list = json2ListRecursion(str, mapper); map.put(entry.getKey(), list); } else if (str.startsWith("{")) { Map<String, Object> mapRecursion = json2MapRecursion(str, mapper); map.put(entry.getKey(), mapRecursion); } } } return map; } /** * 与javaBean json数组字符串转换为列表 */ public static <T> List<T> json2list(String jsonArrayStr, Class<T> clazz) throws Exception { JavaType javaType = getCollectionType(ArrayList.class, clazz); List<T> lst = (List<T>) objectMapper.readValue(jsonArrayStr, javaType); return lst; } /** * 获取泛型的Collection Type * * @param collectionClass 泛型的Collection * @param elementClasses 元素类 * @return JavaType Java类型 * @since 1.0 */ public static JavaType getCollectionType(Class<?> collectionClass, Class<?>... elementClasses) { return objectMapper.getTypeFactory().constructParametricType(collectionClass, elementClasses); } /** * map 转JavaBean */ public static <T> T map2pojo(Map map, Class<T> clazz) { return objectMapper.convertValue(map, clazz); } /** * map 转json * * @param map * @return */ public static String mapToJson(Map map) { try { return objectMapper.writeValueAsString(map); } catch (Exception e) { e.printStackTrace(); } return ""; } /** * map 转JavaBean */ public static <T> T obj2pojo(Object obj, Class<T> clazz) { return objectMapper.convertValue(obj, clazz); } }
/** * fastjson工具类 * @version:1.0.0 */ public class FastJsonUtils { private static final SerializeConfig config; static { config = new SerializeConfig(); config.put(java.util.Date.class, new JSONLibDataFormatSerializer()); // 使用和json-lib兼容的日期输出格式 config.put(java.sql.Date.class, new JSONLibDataFormatSerializer()); // 使用和json-lib兼容的日期输出格式 } private static final SerializerFeature[] features = {SerializerFeature.WriteMapNullValue, // 输出空置字段 SerializerFeature.WriteNullListAsEmpty, // list字段如果为null,输出为[],而不是null SerializerFeature.WriteNullNumberAsZero, // 数值字段如果为null,输出为0,而不是null SerializerFeature.WriteNullBooleanAsFalse, // Boolean字段如果为null,输出为false,而不是null SerializerFeature.WriteNullStringAsEmpty // 字符类型字段如果为null,输出为"",而不是null }; public static String toJSONString(Object object) { return JSON.toJSONString(object, config, features); } public static String toJSONNoFeatures(Object object) { return JSON.toJSONString(object, config); } public static Object toBean(String text) { return JSON.parse(text); } public static <T> T toBean(String text, Class<T> clazz) { return JSON.parseObject(text, clazz); } // 转换为数组 public static <T> Object[] toArray(String text) { return toArray(text, null); } // 转换为数组 public static <T> Object[] toArray(String text, Class<T> clazz) { return JSON.parseArray(text, clazz).toArray(); } // 转换为List public static <T> List<T> toList(String text, Class<T> clazz) { return JSON.parseArray(text, clazz); } /** * 将javabean转化为序列化的json字符串 * @param keyvalue * @return */ public static Object beanToJson(KeyValue keyvalue) { String textJson = JSON.toJSONString(keyvalue); Object objectJson = JSON.parse(textJson); return objectJson; } /** * 将string转化为序列化的json字符串 * @param keyvalue * @return */ public static Object textToJson(String text) { Object objectJson = JSON.parse(text); return objectJson; } /** * json字符串转化为map * @param s * @return */ public static Map stringToCollect(String s) { Map m = JSONObject.parseObject(s); return m; } /** * 将map转化为string * @param m * @return */ public static String collectToString(Map m) { String s = JSONObject.toJSONString(m); return s; } }
以上是关于google的gson和阿里巴巴的fastjson,为啥把有关联实体转json就会报错啊,说缺少字段啥乱七八糟的。的主要内容,如果未能解决你的问题,请参考以下文章
google的gson和阿里巴巴的fastjson,为啥把有关联实体转json就会报错啊,说缺少字段啥乱七八糟的。
Gson、FastJson、Jackson、json-lib对比总结