点击打开链接<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>
JSONObject转换JSON--将Date转换为指定格式
最新推荐文章于 2024-04-24 10:36:14 发布