游乐游手机版
首页/AI教程/文章详情

Java类的泛型集合转换成JSON对象的实现与示例代码

时间:2026-06-12 15:41
提供了两个重载方法,用于将Java泛型集合转换为JSON格式:分页版本返回包含总记录数totalCount和当前页数据rows的JSON对象;无分页版本直接返回records数组。这样能够简化前后端数据传递,无需手动拼接JSON字符串,提高开发效率。

在使用 ExtJS 进行前端开发时,前后端数据交互几乎离不开 JSON 格式。这个工具类未来或许也能帮到你——它能够将 Java 中的泛型集合直接转换为 JSON,省去手动拼接的麻烦。下面先来看核心代码。

将ja va类的泛型集合转换成json对象

ConvertJsonUtils.java

package com.sunweb.util.jsonfactory;

import ja va.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
     *            泛型集合
     * @param countList
     *            数据集合的总行数
     * @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();
        // 拼接字符串
        JSONObject jn = new JSONObject();
        try {
            jn.put("records", jsonArray);
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return jn.toString();
    }

}

这里提供了两个重载方法:一个支持分页,返回包含 totalCountrows 的结构;另一个只返回 records。具体选用哪个,取决于前端框架的需求。例如 ExtJS 的 Grid 通常需要分页数据,此时应使用带总数参数的版本;若仅做列表展示,无分页的版本则更加简洁。

Test.java —— 快速验证转换效果

package com.sunweb.util.jsonfactory;

import ja va.util.ArrayList;
import ja va.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集合
            list.add(stu);
        }
        //现在将集合转成json不分页
        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,最后拼接分页信息。代码量虽小,但在日常开发中非常实用。

来源:https://developer.aliyun.com/article/255771
上一篇Table表格兼容性问题及跨浏览器解决方案汇总 下一篇Java线程中断让步睡眠合并详解
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
Windows Docker Desktop RabbitMQ生产级部署完整指南
AI教程 · 2026-06-29

Windows Docker Desktop RabbitMQ生产级部署完整指南

前言 在 Windows 本地开发环境中,直接安装 RabbitMQ 确实颇为周折:需要单独配置 Erlang 运行环境、手动管理环境变量、服务启停全凭手工操作。更令人困扰的是,版本兼容冲突、端口占用、环境不一致等问题层出不穷。笔者见过不少开发者为搭建环境就得耗费整整半天时间。 相比之下,借助 Do

AI搜索重构制造业采购逻辑的阿里云企业级GEOCMS优化实践
AI教程 · 2026-06-29

AI搜索重构制造业采购逻辑的阿里云企业级GEOCMS优化实践

先分享一个切实感受。过去两年,我们与福建制造企业合作较为频繁,发现一个非常突出的现象:超过80%的企业官网,产品参数仍然存放在PDF或图片中。AI爬虫?根本无法抓取。这些企业技术实力不弱、资质证照齐全、应用案例也丰富,但在AI搜索这一全新战场上,它们几乎处于隐身状态。 一、一个正在发生的行业变化 A

阿里云Token Plan团队版功能价格与省钱购买指南
AI教程 · 2026-06-29

阿里云Token Plan团队版功能价格与省钱购买指南

阿里云百炼近期推出了名为“Token Plan 团队版”的全新服务,这一服务专为企业与开发者量身打造,定位为AI大模型订阅平台。通过引入Credits作为统一计量单位,将文本生成、图像生成等多模态AI能力纳入单一计费体系,同时无缝兼容主流AI编程工具及智能体(Agent)生态系统。其核心亮点包括:全

阿里云物联网.NET Core客户端位置信息上报
AI教程 · 2026-06-29

阿里云物联网.NET Core客户端位置信息上报

阿里云物联网平台的位置服务并非一个完全独立的功能模块。位置信息可包含二维坐标与三维坐标,而位置数据的来源本质上是借助设备属性进行上传。换言之,若要让设备上报位置,您需先将其视为一个普通属性进行处理。 1)添加二维位置数据 操作过程十分简洁。进入数据分析 → 空间数据可视化 → 二维数据,点击添加,将

年阿里云服务器选型配置与网站部署全攻略
AI教程 · 2026-06-29

年阿里云服务器选型配置与网站部署全攻略

2026年,阿里云服务器生态已高度成熟,形成了清晰的轻量应用服务器与ECS云服务器两大产品阵营。无论你是计划搭建个人博客、企业官网,还是运营电商平台、进行应用开发,基本都能找到理想的解决方案。本指南将从服务器选型、配置选择、部署流程到安全运维,系统梳理2026年最实用的操作要点,帮助你少走弯路,让网