关于如何将含有Date类型属性的对象转换成符合实际应用的Json字符串
来源:互联网 发布:吉利知豆电动车官网 编辑:程序博客网 时间:2024/06/03 14:30
关于如何将含有Date类型属性的对象转换成符合实际应用的Json字符串
--即如何使用JsonConfig 以及 JsonValueProcessor接口实现
当我们将一个类实例转换成JSON字符串时 可以使用JSONObject 以及JSONArray两个常用的类进行转换。关于这两个类的使用方法这里就不作详述,有兴趣的初学者可以查看我的另外一篇关于JSON的文章:
地址:http://blog.csdn.net/lany1988/article/details/55188001
如果是一个普通的类对象 里面没有特殊的属性 我们就可以简单的做个转换 实现类转JSON字符串,但是如果对象中有Date类型的成员 那我们就不能简单的进行转换了。
首先看看不做处理时,含有Date类型的对象会转成什么样的JSON字符串:
package miantest.jsontest;import java.util.Date;import net.sf.json.JSONObject;import net.sf.json.JsonConfig;public class JsonDemoTest {private String a;private Date d;private Date[] ds;public JsonDemoTest() {super();}public JsonDemoTest(String a, Date d, Date[] ds) {super();this.a = a;this.d = d;this.ds = ds;}public String getA() {return a;}public void setA(String a) {this.a = a;}public Date getD() {return d;}public void setD(Date d) {this.d = d;}public Date[] getDs() {return ds;}public void setDs(Date[] ds) {this.ds = ds;}public static void main(String[] args) {//JsonConfig jsonConfig = new JsonConfig();//jsonConfig.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor());Date date = new Date();Date[] ds = new Date[2];ds[0] = new Date();ds[1] = new Date();JsonDemoTest jdt = new JsonDemoTest("aaa",date,ds);JSONObject jsonObject = JSONObject.fromObject(jdt);System.out.println(jsonObject.toString());}}如上面的代码 我们在面板输出后是这样子的:
很显然,我们想要的时间字符串以这种形式输出了,如果传给前台非常不好处理,如果能输出{d:2017-04-20}
类似这样的就非常好了。那我们该怎么做呢?其实很简单,我们只需要使用JsonConfig.class 这个类就好了。
我们将代码中的注释 放开(即如下这两句代码)
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor());
以及将 JSONObject jsonObject = JSONObject.fromObject(jdt); 这句代码写成:
JSONObject jsonObject = JSONObject.fromObject(jdt,jsonConfig);
就搞定了,现在我开始简单解释下。
JsonConfig.class 这个类从字面上来解释叫json的配置类,它的作用可不小,通过这个类我们可以对Json类的转换功能进行自定义,比如Date类型,如果不重新自定义就会输出年月日分开的形式,所以我们需要进行自定义,只要是Date类型的属性变量进行自定义输出,输出自己喜欢的样子。
第一步,我们先新建一个JsonConfig这个类对象JsonConfig jsonConfig = new JsonConfig();
第二步,调用jsonConfig这个对象的一个方法叫做 registerJsonValueProcessor(Class c,JsonValueProcessor o)
jsonConfig.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor());
这个方法需要两个参数:
1.第一个是你想要进行转换的属性类型,这里我想自定义Date类型的属性,所以填写Date.class
2.第二个是一个实现了JsonValueProcessor 这个接口的一个实现类,所以我们新建一个类 代码如下:
package miantest.jsontest;import java.text.SimpleDateFormat;import java.util.Date;import net.sf.json.JsonConfig;import net.sf.json.processors.JsonValueProcessor;public class JsonDateValueProcessor implements JsonValueProcessor{//实现该接口private String datePattern = "yyyy-MM-dd";//默认将Date转成的我们需要的样式public JsonDateValueProcessor() {super();}public JsonDateValueProcessor(String datePattern) {//这个构造方法的作用就是我们在创建对象还可以改变默认样式super();this.datePattern = datePattern;}public Object processArrayValue(Object value, JsonConfig jsonConfig) {//这里强调下 这里的value其实是数组里单个value值try { //所以这个方法的实现和下面那个一毛一样 你可以合并if(value instanceof Date){//我之所以没合并是为了做实验 验证强调的点SimpleDateFormat sdf = new SimpleDateFormat(datePattern);Date date = (Date)value;return sdf.format(date);}return value == null ? "" : value.toString();} catch (Exception e) {return "";}//return null;}public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) {try {if(value instanceof Date){SimpleDateFormat sdf = new SimpleDateFormat(datePattern);Date date = (Date)value;return sdf.format(date);}return value == null ? "" : value.toString();} catch (Exception e) {return "";}//return null;}public String getDatePattern() {return datePattern;}public void setDatePattern(String datePattern) {this.datePattern = datePattern;}}
第三步,在使用JSONObject或JSONArray的方法fromObject(obj,jsonConfig);
最后输出的日期格式就是我们想要的格式了。如下图:
非常简单 这个JSON对日期的处理 是不是很像Structs框架 在ActionForm里处理时间Date呢,一个是输出一个是输入,都是通过框架自带的类进行格式的转换,主要就是时间日期的处理。
有兴趣的朋友可以看看我写的 ActionForm处理日期的文章 地址:http://blog.csdn.net/lany1988/article/details/69386736
- 关于如何将含有Date类型属性的对象转换成符合实际应用的Json字符串
- JSON(1):如何将符合json语法的字符串转换为一个JS对象
- JSON(2):如何将一个java对象转换为一个符合json语法的字符串
- 将Date日期类型的字段转换成json字符串
- json学习(一)--将一个对象或集合转换成符合json数据格式的字符串
- 关于date类型的json字符串相互转换
- JSON(3):Java的Date类型转换为符合json语法的字符串遇到的问题及其解决办法
- 如何将String的日期转换成Date类型的对象
- C++ 将字符串转换成date类型的数据
- 将long类型的字符串转换成date
- 关于java将String类型的时间字符串转换为Date类型的问题
- 将java.util.Date类型转换成json时,使用JsonValueProcessor将date转换成希望的类型
- JavaScript 将 JSON 字符串转换成 JSON 对象的数组
- 将集合属性对象转换成json格式字符串
- java将实体对象转换成JSON格式的字符串
- 字符串类型的xml转换成json对象
- 使用JSONObject类转换字符串含有集合类型的属性 JSON字符串转换object错误:MorphDynaBean cannot be cast to com.softright.bean.Tes
- js中如何将字符串转换成json类型
- centos下常用指令
- 2017iOS真机调试步骤(获取上线证书步骤)
- 机器学习之正则化(Regularization)
- Tomcat修改service.xml性能调优 增加最大并发连接数
- 02_组件(Components)
- 关于如何将含有Date类型属性的对象转换成符合实际应用的Json字符串
- 效率(5)正则表达式检索
- Linux dd命令全面解析
- 解读2017年云计算发展趋势 — 简本
- 凑平方数
- 【社会化评论】“重要通知: 多说即将关闭”
- SuperMap iClient for 3D 相关知识点
- 远程连接Oracle数据库
- 拼音读数字(难度系数:1颗星)