使用说明
JSON的作用和优势就不细说,在开发中使用其数据转换功能,譬如由前台传过来的json字符串转换成对象,由对象转换成json字符串等,目前json庞大的工具类已经为我们实现了这些功能。首先导入相关工具包:
后台JAVA类中导入json-lib工具类:json-lib-2.4-jdk15.jar
前台页面中导入:json2.js
源码
代码1,JSON处理类
import net.sf.json.JSON;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
/**
* JSON数据处理工具类
*/
public class JSONUtil
{
/**
* 实体类型的对象
*/
public static final int OBJECT_TYPE_BEAN = 1;
/**
* 集合类型对象
*/
public static final int OBJECT_TYPE_LIST = 2;
/**
* 方法名称:writeJsonToResponse
* 内容摘要:向客户端写入JSON字符串流
* @param response HTTP响应
* @param object 待写入的对象
* @param objType 待写入的对象类型
* @return
*/
public static boolean writeJsonToResponse(HttpServletResponse response, Object object, int objType)
{
boolean flag = true;
if(object == null)
{
Debug.println("待写入的对象为空");
return false;
}
response.setContentType("text/xml; charset=UTF-8");
try
{
JSON json = null;
if (objType == OBJECT_TYPE_BEAN)
{
json = JSONObject.fromObject(object);
}
else if (objType == OBJECT_TYPE_LIST)
{
json = JSONArray.fromObject(object);
}
else
{
Debug.println("待写入实体的对象类型不正确");
return false;
}
String responseText = json.toString();
// Debug.println(json.toString());
response.getWriter().write(responseText);
}
catch (IOException e)
{
flag = false;
e.printStackTrace();
}
return flag;
}
/**
* 方法名称:parseJsonObjectToBean
* 内容摘要:将一个JSON对象转换成指定类型的Bean
* @param json 任意实体,包括Json格式字符串
* @param clazz 需要转换的bean的Class
* @return
*/
public static Object parseJsonObjectToBean(Object json, Class clazz)
{
Object bean = null;
try
{
JSONObject jsonObject = JSONObject.fromObject(json);
bean = JSONObject.toBean(jsonObject, clazz);
}
catch (Exception e)
{
e.printStackTrace();
}
return bean;
}
/**
* 方法名称:parseJsonArrayToBean
* 内容摘要:将一个JSON对象转换成指定类型的Bean集合
* @param json 任意实体,包括Json格式字符串
* @param clazz 需要转换的bean的Class
* @return
*/
public static List<Object> parseJsonArrayToBean(Object json, Class clazz)
{
List<Object> list = new LinkedList<Object>();
try
{
JSONArray jsonArray = JSONArray.fromObject(json);
Object[] beans = jsonArray.toArray();
Object bean = null;
for(int i=0 ; i< beans.length; i++)
{
bean = parseJsonObjectToBean(beans[i], clazz);
list.add(bean);
}
}
catch (Exception e)
{
e.printStackTrace();
}
return list;
}
/**
* 方法名称:getJsonString
* 内容摘要:将对象转换为JSON字符串
* @param object
* @param objType
* @return
*/
public static String getJsonString(Object object, int objType)
{
JSON json = null;
try
{
json = null;
if (objType == OBJECT_TYPE_BEAN)
{
json = JSONObject.fromObject(object);
}
else if (objType == OBJECT_TYPE_LIST)
{
json = JSONArray.fromObject(object);
}
else
{
return "待写入实体的对象类型不正确";
}
}
catch (Exception e)
{
return "转换JSON字符串出错";
}
return json.toString();
}
public static void main(String[] args)
{
String json = "[]";
Object obj = parseJsonArrayToBean(json, TaskBatchReportJSONData.class);
System.out.print("");
}
}
此类的作用是封装了json-lib中的方法,实现了由json字符串生成对象或者由对象生成json字符串的功能,生成的字符串可以作为前台页面的数据展示,如jquery easyui 的列展示等。如:
JSONUtil.writeJsonToResponse(response, modelData, JSONUtil.OBJECT_TYPE_BEAN);
代码2 前台页面代码
前台页面需要导入 json2.js javascript文件,主要使用的是其根据数组数据生成json格式字符串功能,当然如果你想自己拼接成json格式字符串格式也可以,但是遇到大的对象数据模型,其工作量是非常大的。
json2生成的JSON对象可以把数组对象组装成json格式字符串,如:
JSON.stringify(updatedRows)
var updatedRows = new Array();
后天处理代码:
String json = request.getParameter("json");
List<Object> list = JSONUtil.parseJsonArrayToBean(json,TaskReportForDayJSONData.class);
使用范围
JSON适合于使用ajax方式的富客户端页面,如使用Jquery form、easyui等插件的环境,再使用JSONUtil类对json格式的字符串进行对象转换,可以省去很多对象赋值的操作。