首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 從數據庫查詢數據轉 JSON 並拆分屬性到對應 List/數組

     編輯:程式設計疑難解答

需求場景

查詢數據庫得到包含 `time` 和 `io` 兩屬性的記錄列表,轉為 JSON 後,需將兩屬性分別提取到兩個集合(或數組)中,供前端圖表使用。

實現方案(以 JSON-lib 為例)

1. 查詢並轉 JSON

List<Map<String, Object>> list = jdbcTemplate.queryForList("SELECT time, io FROM sensor_data");
String json = JSONArray.fromObject(list).toString();
// json 格式:[{"time":"2023-01-01","io":123},{"time":"2023-01-02","io":456}]

2. 解析 JSON 拆分屬性

JSONArray jsonArray = JSONArray.fromObject(json);
List<String> timeList = new ArrayList<>();
List<String> ioList = new ArrayList<>();

for (int i = 0; i < jsonArray.size(); i++) {
    JSONObject obj = jsonArray.getJSONObject(i);
    timeList.add(obj.getString("time"));      // 獲取 time
    ioList.add(obj.getString("io"));          // 獲取 io(自動轉字符串)
}

// 若需轉數組
String[] timeArr = timeList.toArray(new String[0]);
String[] ioArr = ioList.toArray(new String[0]);

3. 直接構建對象列表(推薦,避免中間 JSON)

List<SensorData> dataList = jdbcTemplate.query("SELECT time, io FROM sensor_data", 
    (rs, rowNum) -> new SensorData(rs.getString("time"), rs.getInt("io")));

List<String> times = dataList.stream().map(SensorData::getTime).collect(Collectors.toList());
List<Integer> ios = dataList.stream().map(SensorData::getIo).collect(Collectors.toList());

進階:直接返回前端所需結構

若前端 ECharts 需 `{ categories: [], series: [{data:[]}] }`,後端直接組裝 Map 返回:

Map<String, Object> result = new HashMap<>();
result.put("time", timeList);
result.put("io", ioList);
return result; // SpringMVC 自動轉 JSON 響應

工具選擇建議

  • Jackson / Gson:現代項目首選,性能好,API 簡潔。
  • JSON-lib:老項目常用,依賴較多,維護模式。
  • Fastjson:國產高性能,注意版本安全漏洞。

注意事項

  • 數據庫字段類型與 Java 類型映射正確(DATE → String/LocalDateTime,NUMBER → Integer/Double)。
  • 大數據量時避免一次性載入所有記錄,考慮分頁或流式處理。
  • 前端若需數值型數組,後端傳 `List` 而非 `List`,減少前端解析。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved