博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Gson将对象类转成Json对象时出现\u003d的问题
阅读量:5931 次
发布时间:2019-06-19

本文共 6532 字,大约阅读时间需要 21 分钟。

package com.xinwei.util; import java.lang.reflect.Type; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Map; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonDeserializer; import com.google.gson.JsonElement; import com.google.gson.JsonParseException; import com.google.gson.JsonPrimitive; import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; import com.google.gson.reflect.TypeToken; public class JsonUtil{
         // 支持转换的日期格式     public static final DateFormat[] ACCEPT_DATE_FORMATS = {
            new SimpleDateFormat("MM/dd/yyyy"),             new SimpleDateFormat("MM/dd/yyyy HH:mm:ss"),             new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"),             new SimpleDateFormat("yyyy/MM/dd HH:mm:ss")     };     /**      * 将对象序列化为json字符串,只对有@expose注解的进行序列化      * @param obj      * @return      */     public static String toJsonWithExclusive(Object obj){
        Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation()                                      .registerTypeAdapter(Date.class, new MyDateSerializer())                                      .create();         String json = gson.toJson(obj);                      return json;     }          /**      * 将对象序列化为json字符串,不区分注解      * @param obj      * @return      */     public static String toJson(Object obj){
        Gson gson = new GsonBuilder().registerTypeAdapter(Date.class, new MyDateSerializer())                                      .create();         String json = gson.toJson(obj);                      return json;     }          public static String toJsonFilterEquals(Object obj){
        Gson gson = new GsonBuilder().disableHtmlEscaping().create();           String json = gson.toJson(obj);                      return json;     }               /**      * 将对象序列化为json字符串,不区分注解      * @param obj      * @return      */     public static String toJson0(Object obj){
        String json = toJson(obj, Date.class, new MyTimestampSerializer());             return json;     }          /**      * 将对象序列化为json字符串,不区分注解      * @param obj      * @return      */     @SuppressWarnings("rawtypes")     public static String toJson(Object obj,Class clazz,JsonSerializer serializer){
        Gson gson = new GsonBuilder().registerTypeAdapter(clazz, serializer)                                      .create();         String json = gson.toJson(obj);                      return json;     }          /**      * 将json字符串反序列化为对象,不区分注解      * @param jsonStr      * @param classOfT      * @return      */     @SuppressWarnings("unchecked")     public static
T fromJson(String jsonStr,Type type){
        Gson gson = new GsonBuilder().registerTypeAdapter(Date.class, new MyDateDeserializer())                                      .create();         return (T)gson.fromJson(jsonStr, type);     }          /**      * 将json字符串反序列化为对象,区分注解      * @param jsonStr      * @param classOfT      * @return      */     @SuppressWarnings("unchecked")     public static
T fromJsonWithExclusive(String jsonStr,Type type){
        Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation()                                       .registerTypeAdapter(Date.class, new MyDateDeserializer())                                      .create();         return (T)gson.fromJson(jsonStr, type);     }               @SuppressWarnings("rawtypes")     public static Map fromJson(String jsonStr){
                 Type type = new TypeToken
(){}.getType();         Gson gson = new Gson();         return gson.fromJson(jsonStr, type);     }          /**      * date类型反序列化器      * @author jiweibin      *      */     private static class MyDateDeserializer implements JsonDeserializer
{
                          public Date deserialize(JsonElement json, Type typeOfT,                 JsonDeserializationContext context) throws JsonParseException {
            // 遍历日期支持格式,进行转换             for (DateFormat format : ACCEPT_DATE_FORMATS) {
                try {
                    return format.parse(json.getAsString());                 } catch (Exception e) {
                      continue;                 }            }            return null;                       /* SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");             try {
                return sdf.parse(json.getAsString());             } catch (ParseException e) {
                e.printStackTrace();             }             return null;*/              }              }     /**      * timestamp类型反序列化器      * @author jiweibin      *      */     private static class MyTimestampSerializer implements JsonSerializer
{
             public JsonElement serialize(Date src, Type typeOfSrc,                 JsonSerializationContext context) {
            SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");             return new JsonPrimitive(sdf.format(src));         }              }          /**      * date类型序列化器      * @author jiweibin      *      */     private static class MyDateSerializer implements JsonSerializer
{         public JsonElement serialize(Date src, Type typeOfSrc,                 JsonSerializationContext context) {             SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");             return new JsonPrimitive(sdf.format(src));         }              }               public static void main(String[] args){         /*String json = "{'name': 'helloworlda','array':[{'a':'111','b':'222','c':'333'},{'a':'999'}],'address':'111','people':{'name':'happ','sex':'girl'}}";         JsonUtil.fromJson(json, JsonUtil.class);*/         Date date = new Date();         String dateStr = JsonUtil.toJson(date);         System.out.println(dateStr);     } } {"phoneNumber":"567768","deviceId":"08277599","deviceName":"PP399","alarmId":"201711160408","smcDesc":"您有一条工单未处理,请及时处理alarmId:201711160408","dataId":"2017112000060000489","detailUrl":"http://localhost:8080/workorderms/views/orderms/workorderDetail.html?from\u003dfinish.html\u0026state\u003d\u0026groupId\u003d201711160408\u0026procInstId\u003d30472\u0026taskId\u003d30512"} {"phoneNumber":"45645656","deviceId":"08277588","deviceName":"PP388","alarmId":"201711160405","smcDesc":"您有一条工单未处理,请及时处理alarmId:201711160405","dataId":"2017112000130000496","detailUrl":"http://localhost:8080/workorderms/views/orderms/workorderDetail.html?from=finish.html&state=&groupId=201711160405&procInstId=30450&taskId=30748"

 

转载地址:http://pyutx.baihongyu.com/

你可能感兴趣的文章
TEST
查看>>
微信分享音乐给好友时会话列表无法快捷播放问题填坑记录
查看>>
一些jQuery小知识点(笔记)
查看>>
前端工程化篇之 gulp 一文让您轻松掌握gulp 【全套gulp源码注释解析】
查看>>
移动端 IOS的两个小坑
查看>>
[译] 职业成长的内部指南
查看>>
Git无法使用
查看>>
sql更新是如何执行的?
查看>>
图片上传及图片处理
查看>>
Nacos: Namespace 和 Endpoint 在生产环境下的最佳实践
查看>>
linux基础之逻辑卷管理
查看>>
JDK常用的命令行工具
查看>>
html及html5知识点总结
查看>>
Android---class文件的热修复
查看>>
每个Java程序员需要了解的8个Java开发工具
查看>>
(最完美)红米Note 4的Usb调试模式在哪里打开的方法
查看>>
Map Set
查看>>
面试不再怕,20行Python代码帮你搞懂LRU算法
查看>>
企业级 SpringBoot 教程 (九)springboot整合Redis
查看>>
如何开发自己的Spring Boot Starter
查看>>