首页 > 教程攻略 > ai教程 >将java类的泛型集合转换成json对象

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

来源:互联网 时间:2026-06-12 07:22:08

一般用extjs开发,前后端传输数据,json几乎是绕不开的格式。这个工具类以后大家可能也用得上——把Ja va里的泛型集合直接转成json,省去手动拼接的麻烦。先看核心代码。

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

ConvertJsonUtils.ja va

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.ja va

—— 简单验证一下效果

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.ja va

—— 一个简单的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,最后拼上分页信息。代码量不大,但非常实用。