Java泛型集合转JSON对象的完整指南
在ExtJS开发中,前后端数据交互几乎离不开JSON格式。这套工具类能帮你把Java泛型集合直接转化为JSON对象,彻底告别手动拼接的繁琐。下面直接看核心实现。
ConvertJsonUtils.java
package com.sunweb.util.jsonfactory;
import java.util.List;
import com.sunweb.util.jsonfactory.jsontools.JSONArray;
import com.sunweb.util.jsonfactory.jsontools.JSONException;
import com.sunweb.util.jsonfactory.jsontools.JSONObject;
/**
* @title 通用JSON数据格式转换工具
* @author 贺彬
*/
public class ConvertJsonUtils {
public ConvertJsonUtils() {
super();
}
/**
* 功能:将泛型集合转换为带分页结构的JSON数据
*
* @param list
* 泛型集合
* @param countList
* 数据总行数
* @return 分页JSON字符串
*/
public static String ConvertListToPageJson(List> list, int countList) {
// 创建JSON数组
JSONArray jsonArray = new JSONArray();
// 临时JSON对象
JSONObject jsonObject = null;
// 遍历集合元素
for (Object object : list) {
jsonObject = new JSONObject(object);
jsonArray.put(jsonObject);
}
// 数组转字符串
String json = jsonArray.toString();
// 拼接分页外壳
StringBuffer sb = new StringBuffer();
sb.append("{"totalCount":");
sb.append(countList);
sb.append(","rows":");
sb.append(json);
sb.append("}");
String jsonString = sb.toString();
return jsonString;
}
/**
* 功能:将泛型集合转换为仅含记录数组的JSON数据(无分页)
*
* @param list
* 泛型集合
* @return 无分页JSON字符串
*/
public static String ConvertListToPageJson(List> list){
// 创建JSON数组
JSONArray jsonArray = new JSONArray();
// 临时JSON对象
JSONObject jsonObject = null;
// 遍历集合
for (Object object : list) {
jsonObject = new JSONObject(object);
jsonArray.put(jsonObject);
}
// 数组转字符串
String json = jsonArray.toString();
// 包装为records键
JSONObject jn = new JSONObject();
try {
jn.put("records", jsonArray);
} catch (JSONException e) {
// 异常处理(实际项目建议替换为日志)
e.printStackTrace();
}
return jn.toString();
}
}
这里提供了两个重载方法:一个支持分页(返回totalCount和rows结构),另一个仅返回records数组。具体选哪个取决于前端框架的约定。例如ExtJS的Grid往往需要分页数据,使用带总数的方法即可;如果只需展示列表,无分页版本更简洁。
Test.java —— 快速验证效果
package com.sunweb.util.jsonfactory;
import java.util.ArrayList;
import java.util.List;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
List list = new ArrayList(); // 创建泛型List集合
Student stu = null;
for(int i=0;i<20;i++){
stu = new Student();
stu.setId(i);
stu.setName("贺兵"+i);
// 模拟20条学生数据
list.add(stu);
}
// 无分页转换
String json1 = ConvertJsonUtils.ConvertListToPageJson(list);
System.out.println(json1);
// 分页转换,总数20条
String json2 = ConvertJsonUtils.ConvertListToPageJson(list, 20);
System.out.println(json2);
}
}
执行main方法,控制台会输出两条JSON字符串。第一条是纯数组格式,第二条是带totalCount和rows的外层包装,正好匹配前端分页组件的需求。
Student.java —— 一个简单的POJO
package com.sunweb.util.jsonfactory;
public class Student {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
这个演示类只包含两个字段,实际项目可以替换成自己的实体类,只要属性存在getter方法,JSON工具就能自动解析。核心思路很简洁:利用JSONObject构造器直接将对象传入,组合成JSONArray,最后附加分页元数据。代码量不大,但日常开发非常实用。
