list转换为JsonArray时,使用JsonValueProcessor处理有关数据类型

原创 2013年12月03日 11:31:48

使用JSONArray jsonarray = JSONArray.fromObject(list);可以轻松将list转换为array,但是当list中含有data类型的数据的时候,就会转换不正确,例如将createTime在数据库中为dateTime类型,被转换成了"createTime":"date":26,"day":2,"hours":0,"minutes":0,"month":10,"nanos":0,"seconds":0,"time":1385395200000,"timezoneOffset":-480,"year":113},不是需要的“yyyy-MM-dd HH:mm:ss”格式.

使用JsonValueProcesscor进行配置。JsonValueProcessor是interface,实现该接口,定义List转换为Json格式时,如何转换Date类型的数据。

package util;

 

importjava.text.SimpleDateFormat;

import java.util.Date;

import java.util.Locale;

 

import net.sf.json.JsonConfig;

import net.sf.json.processors.JsonValueProcessor;

 

public classJsonDateValueProcessor implements JsonValueProcessor {

        privateString pattern = "yyyy-MM-dd HH:mm:ss";

 

        //定义两个构造函数,通过第二个构造函数可以自定义时间格式化字符串

        publicJsonDateValueProcessor() {

               super();

        }

 

        publicJsonDateValueProcessor(String format) {

               this.pattern= format;

 

        }

 

        publicObject processArrayValue(Object arg0, JsonConfig arg1) {

               //TODO Auto-generated method stub

               returnprocess(arg0);

        }

 

        publicObject processObjectValue(String arg0, Object arg1, JsonConfig arg2) {

               //TODO Auto-generated method stub

               returnprocess(arg1);

        }

        privateObject process(Object val){

               if(valinstanceof Date&& val!=null){

                       SimpleDateFormatsdf=new SimpleDateFormat(this.pattern,Locale.CHINESE);

                       returnsdf.format(val);

               }else

                       returnval==null?"":val.toString();

              

        }

 

}


在使用JSONArray.fromObject()

JsonConfig config = newJsonConfig();        

                 config.registerJsonValueProcessor(Date.class,new JsonDateValueProcessor());           

               JSONArray.fromObject(readlist,config);

在使用JSONArray.fromObject(list),如果list是hibernate返回的实体结果,实体有级联关系,则极有可能抛出net.sf.json.JSONException: There is a cycle in the hierarchy异常。,所以需要使用JSONValueProcessor处理有关嵌套的字段。例如项目中的Paper这个类,

entity如下:


hbm.xml文件如下:



可以看出pps pqs npps quotepapers这4个字段都是关联了其他表的,这样会

JSONArray会无线循环封装。抛出异常。解决方法如下:


如何在myeclipse中运行main函数时,为main函数加入运行参数?



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

json-lib之jsonConfig详细使用

JSON-lib一些使用技巧

将java.util.Date类型转换成json时,使用JsonValueProcessor将date转换成希望的类型

问题描述:     java里面时间类型转换成json数据就成这样了: "createTime":{"date":30,"day":3,"hours":15,"minutes":14,"mon...

Jsonconfig 设置属性删除,JsonValueProcessor 自定义格式化时间格式

将对象转换成字符串,是非常常用的功能,尤其在WEB应用中,使用 JSON lib能够便捷地完成这项工作。JSON lib能够将Java对象转成json格式的字符串,也可以将Java对象转换成xml格式...

JSON通过配置文件格式化时间属性(解决[object Object]问题)

前段时间项目实战,遇到一个问题,后台通过JSON转变数据交换格式,然后在前台输出结果时,对象中的时间显示竟然是[object Object],思考很久,查阅网上资料,才找到解决办法: try { ...

Json-lib的处理机制(1)--Processor接口

Java Json processor filter

net.sf.json 日期 时间 格式化 方法

编写工具类 import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; i...
  • heardy
  • heardy
  • 2011年09月08日 16:06
  • 6108

将mysql的datetime类型数据,封装成json时遇到的问题

1.首先,直接使用jdbc将数据取数据,注意使用getTimestamp,而不是getTime方法 //在数据库中的时间类型时datetime,在此处要通过getTimeStamp将值取出来 vo...

net.sf.json.JsonConfig 使用详解

http://www.yshjava.cn/post/546.html 将对象转换成字符串,是非常常用的功能,尤其在WEB应用中,使用 JSON lib 能够便捷地完成这项工作。JSON lib能...
  • lrcoop
  • lrcoop
  • 2016年09月27日 19:20
  • 3330

关于如何将含有Date类型属性的对象转换成符合实际应用的Json字符串

关于如何将含有Date类型属性的对象转换成符合实际应用的Json字符串 --即如何使用JsonConfig 以及 JsonValueProcessor接口实现 当我们将一个类实例转换成JSON字符串时...

对象转JSONArray,JSONObject[包括对象中日期格式化,属性过滤]

创建时间转换器 import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; import n...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:list转换为JsonArray时,使用JsonValueProcessor处理有关数据类型
举报原因:
原因补充:

(最多只允许输入30个字)