• 使用Gson将对象类转成Json对象时出现u003d的问题


    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> 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> 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<Map>(){}.getType();
            Gson gson = new Gson();
            return gson.fromJson(jsonStr, type);
        }
        
        /**
         * date类型反序列化器
         * @author jiweibin
         *
         */
        private static class MyDateDeserializer implements JsonDeserializer<Date>{
            
            
            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<Date>{
        
            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<Date>{

            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?fromu003dfinish.htmlu0026stateu003du0026groupIdu003d201711160408u0026procInstIdu003d30472u0026taskIdu003d30512"}


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

  • 相关阅读:
    后台线程处理数据,如何实时更新UI(datagridview)多线程同步问题
    DataGridView设置行高
    C#打开外部文件,如txt文件
    20120621第一天_复习与测试\04continue
    关于C#正则表达式MatchCollection类的总结
    关于sqlite中的一个错误 “database is locked"
    UI中 加个timer 写个while true的方法 不断获取run的对象
    最近帮公司开发一个邮件营销软件 用到XPTable 但找了很多方法 摸索了很久都不知道如何更新进度条 不过在国外的一个网站 终于找到答案了
    C# 简单的往txt中写日志,调试时很有用 【转】
    输入要匹配的内容和正则表达式规则 返来单个匹配的内容 正则表达式方法 常用
  • 原文地址:https://www.cnblogs.com/alamps/p/7883170.html
Copyright © 2020-2023  润新知