首页 > 代码库 > Json-lib简单使用

Json-lib简单使用

Json-lib可以将Java对象转成json格式的字符串,也可以将Java对象转换成xml格式的文档,同样可以将json字符串转换成Java对象或是将xml字符串转换成Java对象。

1、 首先要去官方下载json-lib工具包(http://sourceforge.net/projects/json-lib/files/json-lib/json-lib-2.4/)

Json-lib 依赖下面几个包:

下面言归正传 开始介绍json-lib的使用:

在实际项目中,为了代码复用性,减少代码冗余,常常对某些方法进行封装,用到的时候直接调用,不必要每次都重写相同代码。

Json-lib 可以处理集合或者单个对象转换成json字符串,针对集合或者单个对象json-lib采用了不同的方法来分开处理:

1)  当参数为单个对象:

  //将参数对象转化成JSONObject对象

  JSONObject jsonObject = JSONObject.fromObject(pObject);

  //通过JSONObjecttoString()方法得到json字符串

  String jsonString = jsonObject.toString();

2)  当参数为集合类型

 //将参数对象转换成JSONArray对象

 JSONArray jsonArray = JSONArray.fromObject(pObject);

 //通过jsonArray的toString()方法得到json字符串

 String  jsonString = jsonArray.toString();

 

※json-lib在处理日期格式化的时候要注意,如果你要格式化输出日期,需要手动实现JsonValueProcessor接口,来对日期进行处理。JsonValueProcessor接口中声明了两个方法:processArrayValue(Object value, JsonConfig jsonConfig)和 processObjectValue(String key, Object value,JsonConfig jsonConfig)顾名思义,分别针对数组集合和单个对象进行处理。

下面是我的实现:

/**

实现JsonValueProcessor接口

*/

public class DateJsonValueProcessor implements JsonValueProcessor{

    

    private String format  = "yyyy-MM-dd HH:mm:ss" ;  

    public DateJsonValueProcessor(String format){  

        this.format = format;  

    }  

/**

*

针对数组进行处理

*/

public Object processArrayValue(Object value, JsonConfig jsonConfig) {

String[] obj = {};

if (value instanceof java.util.Date[]) {

SimpleDateFormat sf = new SimpleDateFormat(format);

java.util.Date[] dates = (java.util.Date[]) value;

obj = new String[dates.length];

for (int i = 0; i < dates.length; i++) {

obj[i] = sf.format(dates[i]);

}

}

if (value instanceof Timestamp[]) {

SimpleDateFormat sf = new SimpleDateFormat(format);

Timestamp[] dates = (Timestamp[]) value;

obj = new String[dates.length];

for (int i = 0; i < dates.length; i++) {

obj[i] = sf.format(dates[i]);

}

}

if (value instanceof java.sql.Date[]) {

SimpleDateFormat sf = new SimpleDateFormat(format);

java.sql.Date[] dates = (java.sql.Date[]) value;

obj = new String[dates.length];

for (int i = 0; i < dates.length; i++) {

obj[i] = sf.format(dates[i]);

}

}

return obj;

}

/**

 * 格式化单一对象

 */

public Object processObjectValue(String key, Object value,

JsonConfig jsonConfig) {

//判断value是否为空

if(GSUtils.isEmpty(value)){

return "";

}

//判断value类型

if (value instanceof Timestamp) {

String str = new SimpleDateFormat(format).format((Timestamp) value);

return str;

else if (value instanceof java.util.Date) {

String str = new SimpleDateFormat(format).format((java.util.Date) value);

return str;

else if (value instanceof java.sql.Date) {

String str = new SimpleDateFormat(format).format((java.sql.Date) value);

return str;

}

return value.toString();

}

public String getFormat() {

return format;

}

 

public void setFormat(String format) {

this.format = format;

}

}

实现了JsonValueProcessor接口,还没有完,因为json-lib不知道啊,所以还要继续下去,现在我们需要用到JsonConfig类,通过使用这个类,可以将我们自定义的实现注册到json-lib上,关键代码如下:

 

JsonConfig cfg = new JsonConfig();

cfg.registerJsonValueProcessor(java.sql.Timestamp.classnew DateJsonValueProcessor(pFormatString));

cfg.registerJsonValueProcessor(java.util.Date.classnew DateJsonValueProcessor(pFormatString));

cfg.registerJsonValueProcessor(java.sql.Date.classnew DateJsonValueProcessor(pFormatString));

 

到了这一步 我们终于要完成任务了,但是还是继续看吧,我们需要将jsonconfig对象传入fromObject中,注意cfg

 1)  当参数为单个对象:

  //将参数对象转化成JSONObject对象

  JSONObject jsonObject = JSONObject.fromObject(pObject,cfg);

  //通过JSONObjecttoString()方法得到json字符串

  String jsonString = jsonObject.toString();

 

     2) 当参数为集合类型

 //将参数对象转换成JSONArray对象

 JSONArray jsonArray = JSONArray.fromObject(pObject,cfg);

 //通过jsonArray的toString()方法得到json字符串

 String  jsonString = jsonArray.toString();

...

关于json-lib 功能还是非常强大的,这里只是工作涉及到这部分知识点,更多功能请参考API,这里简单介绍一些工作中常用的方法:

toBean(String jsonString, Class targetClass)---json字符串转化为目标对象,需要注意的是目标类中必须有空的构造函数。

toString()---将java对象转换成json字符串 

toArray() -- 从json字串中得到相应java数组 

toArray() -- 将list转换成Array