zoukankan      html  css  js  c++  java
  • JSONObject转换JSON之将Date转换为指定格式(转)

    项目中,经常会用JSONObject插件将JavaBean或List<JavaBean>转换为JSON格式的字符串,而JavaBean的属性有时候会有java.util.Date这个类型的时间对象,这时JSONObject默认会将Date属性转换成这样的格式:

    Html代码  收藏代码
     
    {"nanos":0,"time":-27076233600000,"minutes":0,"seconds":0,"hours":0,"month":11,"timezoneOffset":-480,"year":-789,"day":5,"date":22}  

     而这种格式肯定是非常难以理解的,为了将Date转换为我们认识的“yyyy-MM-dd”格式,需要做以下操作。

     首先创建一个时间转换器

    public class JsonDateValueProcessor implements JsonValueProcessor {
        private String format ="yyyy-MM-dd";
        
        public JsonDateValueProcessor() {
            super();
        }
        
        public JsonDateValueProcessor(String format) {
            super();
            this.format = format;
        }
    
        @Override
        public Object processArrayValue(Object paramObject,
                JsonConfig paramJsonConfig) {
            return process(paramObject);
        }
    
        @Override
        public Object processObjectValue(String paramString, Object paramObject,
                JsonConfig paramJsonConfig) {
            return process(paramObject);
        }
        
        
        private Object process(Object value){
            if(value instanceof Date){  
                SimpleDateFormat sdf = new SimpleDateFormat(format,Locale.CHINA);  
                return sdf.format(value);
            }  
            return value == null ? "" : value.toString();  
        }
    
    }

    然后在调用JSONObject之前创建一个JsonConfig,并且将上一步定义的date转换器注册进去:

    Java代码  收藏代码
    JsonConfig jsonConfig = new JsonConfig();
    jsonConfig.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor());

    最后将JsonConfig放入JSONObject对象中,这里针对不同的数据类型有多种方式放入JsonConfig:

    Java代码  收藏代码
    JSONObject json = new JSONObject();
    //Map转JSON
    json.putAll(Map, jsonConfig);

     或者

    Java代码  收藏代码
    JSONObject json = new JSONObject();
    //JavaBean转JSON
    json.fromObject(object, jsonConfig)

    最后我们看到的结果就是只要JavaBean中有Date对象,转换成JSON字符串时就会变成“yyyy-MM-dd”格式。

  • 相关阅读:
    dpkg 被中断,您必须手工运行 sudo dpkg –configure -a 解决此问题
    运行wpscan报错Could not find 'nokogiri' (~> 1.8.0)
    理解:jar和war的区别
    AcWing3494. 国际象棋(状压DP)
    AcWing3422. 左孩子右兄弟(树形DP)
    python命名空间
    mysql日志大量报错“original commit timestamp is more recent than the immediate commit timestamp”
    python模块导入
    Centos-Docker镜像制作
    python面向对象之封装
  • 原文地址:https://www.cnblogs.com/LiuChunfu/p/4917934.html
Copyright © 2011-2022 走看看