You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Java将数据库数据转换为指定格式的JSON?

问题描述

数据库里的数据是这样的:

[
  {   
    "id": 1,
    "values": "80,90",
    "name": "number"
  },
  {
    "id": 2,
    "values": "22351,25252,27123,29123,32123",
    "name": "numbers_1"
  },
  {
    "id": 3,
    "values": "12351,15252,17123,19123,12123",
    "name": "numbers_2"
  }
]

要转成下面这种格式的JSON:

[
  {
    "id": 1,
    "highNumber": "80",
    "numbers": [
      {
        "id": 2,
        "numbersCode": "22351,25252,27123,29123,32123"
      }
    ]
  },
  {
    "id": 2,
    "highNumber": "90",
    "numbers": [
      {
        "id": 1,
        "numbersCode": "22351,25252,27123,29123,32123"
      }
    ]
  }
]

JDBC连接已经写好了,但不知道while循环里该怎么写逻辑,现有代码如下:

public List<Number> getAllNumber() {
    List<Number> list = new ArrayList<>();


    try {
        Class.forName("DriverClass");
        Connection conn = JDBCUtils.getConnection();
        PreparedStatement ps = conn.prepareStatement(sql);
        ResultSet rs = ps.executeQuery();

        while (rs.next()) {
            String number= rs.getString("VALUES");
            System.out.println(number);
        }
    }
    catch (Exception e) {
        e.printStackTrace();
    }
    return list;
}

核心需求就是给80和90分别配上指定的numbersCode数据。


解决方案

1. 先定义对应实体类

要生成目标JSON,得先建匹配结构的实体类:

// 对应numbers里的子对象
class NumberItem {
    private int id;
    private String numbersCode;

    public NumberItem(int id, String numbersCode) {
        this.id = id;
        this.numbersCode = numbersCode;
    }

    // 自行补充getter和setter方法
}

// 外层的主对象
class NumberDTO {
    private int id;
    private String highNumber;
    private List<NumberItem> numbers;

    public NumberDTO(int id, String highNumber, List<NumberItem> numbers) {
        this.id = id;
        this.highNumber = highNumber;
        this.numbers = numbers;
    }

    // 自行补充getter和setter方法
}

2. 修改JDBC逻辑

先把数据库里的数据分两类存储:一类是number对应的80、90,另一类是numbers_1里的目标编码串,再组装成需要的结构。修改后的代码:

public List<NumberDTO> getAllNumber() {
    List<NumberDTO> resultList = new ArrayList<>();
    String targetCode = "";
    List<String> highNums = new ArrayList<>();

    try {
        Class.forName("DriverClass");
        Connection conn = JDBCUtils.getConnection();
        // 替换成你实际的表名
        PreparedStatement ps = conn.prepareStatement("SELECT id, values, name FROM your_table");
        ResultSet rs = ps.executeQuery();

        // 先遍历所有数据,提取需要的内容
        while (rs.next()) {
            String name = rs.getString("name");
            String values = rs.getString("values");
            if ("number".equals(name)) {
                // 拆分80和90,存入列表
                String[] nums = values.split(",");
                for (String num : nums) {
                    highNums.add(num.trim());
                }
            } else if ("numbers_1".equals(name)) {
                // 拿到目标编码串
                targetCode = values;
            }
        }

        // 组装目标结构
        for (int i = 0; i < highNums.size(); i++) {
            int dtoId = i + 1; // 外层id从1开始递增
            String highNum = highNums.get(i);
            // 组装numbers列表,这里用原数据中numbers_1的id(2),如需动态对应可调整
            List<NumberItem> items = Collections.singletonList(new NumberItem(2, targetCode));
            resultList.add(new NumberDTO(dtoId, highNum, items));
        }

        // 关闭资源,避免泄漏
        rs.close();
        ps.close();
        conn.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return resultList;
}

3. 转换为JSON字符串

如果要把最终的List转成JSON字符串,可以用Jackson或Gson这类库,以Jackson为例:

ObjectMapper mapper = new ObjectMapper();
String jsonResult = mapper.writeValueAsString(resultList);
System.out.println(jsonResult);

内容的提问来源于stack exchange,提问作者Boris s

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 18:56:01