JSONObject转换JSON--将Date转换为指定格式

点击打开链接<div id="blog_content" class="blog_content">
    <div class="iteye-blog-content-contain" style="font-size: 14px;">
<p>项目中,经常会用JSONObject插件将JavaBean或List<JavaBean>转换为JSON格式的字符串,而JavaBean的属性有时候会有java.util.Date这个类型的时间对象,这时JSONObject默认会将Date属性转换成这样的格式:</p>
<p> </p>
<div class="dp-highlighter" id=""><div class="bar"><div class="tools">Html代码 <embed wmode="transparent" src="/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" flashvars="clipboard=%7B%22nanos%22%3A0%2C%22time%22%3A-27076233600000%2C%22minutes%22%3A0%2C%22seconds%22%3A0%2C%22hours%22%3A0%2C%22month%22%3A11%2C%22timezoneOffset%22%3A-480%2C%22year%22%3A-789%2C%22day%22%3A5%2C%22date%22%3A22%7D" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"> <a href="javascript:void()" title="收藏这段代码" οnclick="code_favorites_do_favorite(this);return false;"><img class="star" src="/images/icon_star.png" alt="收藏代码"><img class="spinner" src="/images/spinner.gif" style="display:none"></a></div></div><ol start="1" class="dp-xml"><li><span><span>{"nanos":0,"time":-27076233600000,"minutes":0,"seconds":0,"hours":0,"month":11,"timezoneOffset":-480,"year":-789,"day":5,"date":22}  </span></span></li></ol></div><pre class="html" name="code" codeable_id="" codeable_type="BlogComment" source_url="http://blessht.iteye.com/blog/2018901#" pre_index="0" title="JSONObject转换JSON--将Date转换为指定格式" style="display: none;">{"nanos":0,"time":-27076233600000,"minutes":0,"seconds":0,"hours":0,"month":11,"timezoneOffset":-480,"year":-789,"day":5,"date":22}</pre>
<p> 而这种格式肯定是非常难以理解的,为了将Date转换为我们认识的“yyyy-MM-dd”格式,需要做以下操作。</p>
<p> </p>
<p> </p>
<p>首先创建一个时间转换器</p>
<p> </p>
<div class="dp-highlighter" id=""><div class="bar"><div class="tools">Java代码 <embed wmode="transparent" src="/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" flashvars="clipboard=public%20class%20JsonDateValueProcessor%20implements%20JsonValueProcessor%20%7B%0A%09private%20String%20format%20%3D%22yyyy-MM-dd%22%3B%0A%09%0A%09public%20JsonDateValueProcessor()%20%7B%0A%09%09super()%3B%0A%09%7D%0A%09%0A%09public%20JsonDateValueProcessor(String%20format)%20%7B%0A%09%09super()%3B%0A%09%09this.format%20%3D%20format%3B%0A%09%7D%0A%0A%09%40Override%0A%09public%20Object%20processArrayValue(Object%20paramObject%2C%0A%09%09%09JsonConfig%20paramJsonConfig)%20%7B%0A%09%09return%20process(paramObject)%3B%0A%09%7D%0A%0A%09%40Override%0A%09public%20Object%20processObjectValue(String%20paramString%2C%20Object%20paramObject%2C%0A%09%09%09JsonConfig%20paramJsonConfig)%20%7B%0A%09%09return%20process(paramObject)%3B%0A%09%7D%0A%09%0A%09%0A%09private%20Object%20process(Object%20value)%7B%0A%20%20%20%20%20%20%20%20if(value%20instanceof%20Date)%7B%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20SimpleDateFormat%20sdf%20%3D%20new%20SimpleDateFormat(format%2CLocale.CHINA)%3B%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20sdf.format(value)%3B%0A%20%20%20%20%20%20%20%20%7D%20%20%0A%20%20%20%20%20%20%20%20return%20value%20%3D%3D%20null%20%3F%20%22%22%20%3A%20value.toString()%3B%20%20%0A%20%20%20%20%7D%0A%0A%7D%0A" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"> <a href="javascript:void()" title="收藏这段代码" οnclick="code_favorites_do_favorite(this);return false;"><img class="star" src="/images/icon_star.png" alt="收藏代码"><img class="spinner" src="/images/spinner.gif" style="display:none"></a></div></div><ol start="1" class="dp-j"><li><span><span class="keyword">public</span><span> </span><span class="keyword">class</span><span> JsonDateValueProcessor </span><span class="keyword">implements</span><span> JsonValueProcessor {  </span></span></li><li><span>    <span class="keyword">private</span><span> String format =</span><span class="string">"yyyy-MM-dd"</span><span>;  </span></span></li><li><span>      </span></li><li><span>    <span class="keyword">public</span><span> JsonDateValueProcessor() {  </span></span></li><li><span>        <span class="keyword">super</span><span>();  </span></span></li><li><span>    }  </span></li><li><span>      </span></li><li><span>    <span class="keyword">public</span><span> JsonDateValueProcessor(String format) {  </span></span></li><li><span>        <span class="keyword">super</span><span>();  </span></span></li><li><span>        <span class="keyword">this</span><span>.format = format;  </span></span></li><li><span>    }  </span></li><li><span>  </span></li><li><span>    <span class="annotation">@Override</span><span>  </span></span></li><li><span>    <span class="keyword">public</span><span> Object processArrayValue(Object paramObject,  </span></span></li><li><span>            JsonConfig paramJsonConfig) {  </span></li><li><span>        <span class="keyword">return</span><span> process(paramObject);  </span></span></li><li><span>    }  </span></li><li><span>  </span></li><li><span>    <span class="annotation">@Override</span><span>  </span></span></li><li><span>    <span class="keyword">public</span><span> Object processObjectValue(String paramString, Object paramObject,  </span></span></li><li><span>            JsonConfig paramJsonConfig) {  </span></li><li><span>        <span class="keyword">return</span><span> process(paramObject);  </span></span></li><li><span>    }  </span></li><li><span>      </span></li><li><span>      </span></li><li><span>    <span class="keyword">private</span><span> Object process(Object value){  </span></span></li><li><span>        <span class="keyword">if</span><span>(value </span><span class="keyword">instanceof</span><span> Date){    </span></span></li><li><span>            SimpleDateFormat sdf = <span class="keyword">new</span><span> SimpleDateFormat(format,Locale.CHINA);    </span></span></li><li><span>            <span class="keyword">return</span><span> sdf.format(value);  </span></span></li><li><span>        }    </span></li><li><span>        <span class="keyword">return</span><span> value == </span><span class="keyword">null</span><span> ? </span><span class="string">""</span><span> : value.toString();    </span></span></li><li><span>    }  </span></li><li><span>  </span></li><li><span>}  </span></li></ol></div><pre class="java" name="code" codeable_id="" codeable_type="BlogComment" source_url="http://blessht.iteye.com/blog/2018901#" pre_index="1" title="JSONObject转换JSON--将Date转换为指定格式" style="display: none;">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();  
    }


}
</pre>
<p> </p>
<p> </p>
<p>然后在调用JSONObject之前创建一个JsonConfig,并且将上一步定义的date转换器注册进去:</p>
<div class="dp-highlighter" id=""><div class="bar"><div class="tools">Java代码 <embed wmode="transparent" src="/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" flashvars="clipboard=JsonConfig%20jsonConfig%20%3D%20new%20JsonConfig()%3B%0AjsonConfig.registerJsonValueProcessor(Date.class%2C%20new%20JsonDateValueProcessor())%3B" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"> <a href="javascript:void()" title="收藏这段代码" οnclick="code_favorites_do_favorite(this);return false;"><img class="star" src="/images/icon_star.png" alt="收藏代码"><img class="spinner" src="/images/spinner.gif" style="display:none"></a></div></div><ol start="1" class="dp-j"><li><span><span>JsonConfig jsonConfig = </span><span class="keyword">new</span><span> JsonConfig();  </span></span></li><li><span>jsonConfig.registerJsonValueProcessor(Date.<span class="keyword">class</span><span>, </span><span class="keyword">new</span><span> JsonDateValueProcessor());  </span></span></li></ol></div><pre class="java" name="code" codeable_id="" codeable_type="BlogComment" source_url="http://blessht.iteye.com/blog/2018901#" pre_index="2" title="JSONObject转换JSON--将Date转换为指定格式" style="display: none;">JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor());</pre>
<p> </p>
<p>最后将JsonConfig放入JSONObject对象中,这里针对不同的数据类型有多种方式放入JsonConfig:</p>
<div class="dp-highlighter" id=""><div class="bar"><div class="tools">Java代码 <embed wmode="transparent" src="/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" flashvars="clipboard=JSONObject%20json%20%3D%20new%20JSONObject()%3B%0A%2F%2FMap%E8%BD%ACJSON%0Ajson.putAll(Map%2C%20jsonConfig)%3B%0A" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"> <a href="javascript:void()" title="收藏这段代码" οnclick="code_favorites_do_favorite(this);return false;"><img class="star" src="/images/icon_star.png" alt="收藏代码"><img class="spinner" src="/images/spinner.gif" style="display:none"></a></div></div><ol start="1" class="dp-j"><li><span><span>JSONObject json = </span><span class="keyword">new</span><span> JSONObject();  </span></span></li><li><span><span class="comment">//Map转JSON</span><span>  </span></span></li><li><span>json.putAll(Map, jsonConfig);  </span></li></ol></div><pre class="java" name="code" codeable_id="" codeable_type="BlogComment" source_url="http://blessht.iteye.com/blog/2018901#" pre_index="3" title="JSONObject转换JSON--将Date转换为指定格式" style="display: none;">JSONObject json = new JSONObject();
//Map转JSON
json.putAll(Map, jsonConfig);
</pre>
<p> 或者</p>
<div class="dp-highlighter" id=""><div class="bar"><div class="tools">Java代码 <embed wmode="transparent" src="/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" flashvars="clipboard=JSONObject%20json%20%3D%20new%20JSONObject()%3B%0A%2F%2FJavaBean%E8%BD%ACJSON%0Ajson.fromObject(object%2C%20jsonConfig)" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"> <a href="javascript:void()" title="收藏这段代码" οnclick="code_favorites_do_favorite(this);return false;"><img class="star" src="/images/icon_star.png" alt="收藏代码"><img class="spinner" src="/images/spinner.gif" style="display:none"></a></div></div><ol start="1" class="dp-j"><li><span><span>JSONObject json = </span><span class="keyword">new</span><span> JSONObject();  </span></span></li><li><span><span class="comment">//JavaBean转JSON</span><span>  </span></span></li><li><span>json.fromObject(object, jsonConfig)  </span></li></ol></div><pre class="java" name="code" codeable_id="" codeable_type="BlogComment" source_url="http://blessht.iteye.com/blog/2018901#" pre_index="4" title="JSONObject转换JSON--将Date转换为指定格式" style="display: none;">JSONObject json = new JSONObject();
//JavaBean转JSON
json.fromObject(object, jsonConfig)</pre>
<p> </p>
<p>最后我们看到的结果就是只要JavaBean中有Date对象,转换成JSON字符串时就会变成“yyyy-MM-dd”格式。</p>
<p> </p>
</div>
  </div>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值