Java泛型集合转JSON对象的完整指南

2026-06-12阅读 0热度 0
其他

在ExtJS开发中,前后端数据交互几乎离不开JSON格式。这套工具类能帮你把Java泛型集合直接转化为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();
    }

}

这里提供了两个重载方法:一个支持分页(返回totalCountrows结构),另一个仅返回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字符串。第一条是纯数组格式,第二条是带totalCountrows的外层包装,正好匹配前端分页组件的需求。

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,最后附加分页元数据。代码量不大,但日常开发非常实用。

免责声明

本网站新闻资讯均来自公开渠道,力求准确但不保证绝对无误,内容观点仅代表作者本人,与本站无关。若涉及侵权,请联系我们处理。本站保留对声明的修改权,最终解释权归本站所有。

相关阅读

更多
欢迎回来 登录或注册后,可保存提示词和历史记录
登录后可同步收藏、历史记录和常用模板
注册即表示同意服务条款与隐私政策