请求将数据库返回的JSON对象转换为JSP联动下拉所需结构
需求:将数据库返回的JSON结构转换为联动下拉菜单所需格式
我需要一个特定结构的JSON对象,用于在JSP中实现部门与市镇的联动响应式下拉菜单。之前用预格式化的JSON实现了功能,但现在从数据库获取的数据结构不符合要求,需要把以下对象A转换为对象B的格式:
原始数据(对象A)
[ {"coddpt":"01","namedpt":"AHUACHAPAN ","codmun":"01","namemun":"AHUACHAPAN "}, {"coddpt":"02","namedpt":"SANTA ANA ","codmun":"01","namemun":"SANTA ANA "}, {"coddpt":"03","namedpt":"SONSONATE ","codmun":"01","namemun":"SONSONATE "}, {"coddpt":"04","namedpt":"CHALATENANGO ","codmun":"01","namemun":"CHALATENANGO "}, {"coddpt":"05","namedpt":"LA LIBERTAD ","codmun":"01","namemun":"LA LIBERTAD "}, {"coddpt":"06","namedpt":"SAN SALVADOR ","codmun":"01","namemun":"SAN SALVADOR "}, {"coddpt":"08","namedpt":"LA PAZ ","codmun":"01","namemun":"LA PAZ "}, {"coddpt":"09","namedpt":"CABAÑAS ","codmun":"01","namemun":"CABAÑAS "}, {"coddpt":"10","namedpt":"SAN VICENTE ","codmun":"01","namemun":"SAN VICENTE "}, {"coddpt":"11","namedpt":"USULUTAN ","codmun":"01","namemun":"USULUTAN "}, {"coddpt":"12","namedpt":"SAN MIGUEL ","codmun":"01","namemun":"SAN MIGUEL "}, {"coddpt":"13","namedpt":"MORAZAN ","codmun":"01","namemun":"MORAZAN "}, {"coddpt":"01","namedpt":"AHUACHAPAN ","codmun":"02","namemun":"CANDELARIA DE LA FRONTERA "}, {"coddpt":"02","namedpt":"SANTA ANA ","codmun":"02","namemun":"COATEPEQUE "}, {"coddpt":"03","namedpt":"SONSONATE ","codmun":"02","namemun":"CHALCHUAPA "}, {"coddpt":"04","namedpt":"CHALATENANGO ","codmun":"02","namemun":"EL CONGO "}, {"coddpt":"05","namedpt":"LA LIBERTAD ","codmun":"02","namemun":"EL PORVENIR "}, {"coddpt":"06","namedpt":"SAN SALVADOR ","codmun":"02","namemun":"MASAHUAT "}, {"coddpt":"07","namedpt":"CUSCATLAN ","codmun":"02","namemun":"METAPAN "}, {"coddpt":"08","namedpt":"LA PAZ ","codmun":"02","namemun":"SAN ANTONIO PAJONAL "}, {"coddpt":"09","namedpt":"CABAÑAS ","codmun":"02","namemun":"SAN SEBASTIAN SALITRILLO "}, {"coddpt":"10","namedpt":"SAN VICENTE ","codmun":"02","namemun":"SANTA ANA "}, {"coddpt":"11","namedpt":"USULUTAN ","codmun":"02","namemun":"STAROSA GUACHI "}, {"coddpt":"12","namedpt":"SAN MIGUEL ","codmun":"02","namemun":"STGO D LA FRONT "}, {"coddpt":"13","namedpt":"MORAZAN ","codmun":"02","namemun":"TEXISTEPEQUE "}, {"coddpt":"01","namedpt":"AHUACHAPAN ","codmun":"03","namemun":"ACAJUTLA "}, {"coddpt":"02","namedpt":"SANTA ANA ","codmun":"03","namemun":"ARMENIA "}, {"coddpt":"03","namedpt":"SONSONATE ","codmun":"03","namemun":"CALUCO "}, {"coddpt":"04","namedpt":"CHALATENANGO ","codmun":"03","namemun":"CUISNAHUAT "}, {"coddpt":"05","namedpt":"LA LIBERTAD ","codmun":"06","namemun":"COATEPEQUE "} ]
目标格式(对象B)
{ "AHUACHAPAN":["AHUACHAPAN","CANDELARIA DE LA FRONTERA","ACAJUTLA"], "SANTA ANA": ["SANTA ANA","COATEPEQUE","ARMENIA"], "SONSONATE": ["SONSONATE","CHALCHUAPA","CALUCO"], "CHALATENANGO":["CHALATENANGO","EL CONGO","CUISNAHUAT"], "LA LIBERTAD":["LA LIBERTAD","EL PORVENIR","COATEPEQUE"], "SAN SALVADOR":["SAN SALVADOR","MASAHUAT"], "CUSCATLAN":["METAPAN"], "LA PAZ":["LA PAZ","SAN ANTONIO PAJONAL"], "CABAÑAS":["CABAÑAS","SAN SEBASTIAN SALITRILLO"], "SAN VICENTE":["SAN VICENTE","SANTA ANA"], "USULUTAN":["USULUTAN","STAROSA GUACHI"], "SAN MIGUEL":["SAN MIGUEL","STGO D LA FRONT"], "MORAZAN":["MORAZAN","TEXISTEPEQUE"] }
解决方案
前端JavaScript转换方法
直接在前端遍历原始数组,以部门名称为键收集对应市镇名称(自动去除字符串首尾空格,避免重复项):
// 假设原始数据为data(即对象A) const data = [/* 原始JSON数组内容 */]; const result = {}; data.forEach(item => { const deptName = item.namedpt.trim(); const munName = item.namemun.trim(); // 初始化部门对应的市镇数组 if (!result[deptName]) { result[deptName] = []; } // 避免重复添加市镇 if (!result[deptName].includes(munName)) { result[deptName].push(munName); } }); // 输出目标格式的JSON console.log(JSON.stringify(result, null, 2));
后端Java转换方法(JSP后端处理)
如果希望在后端完成转换,可通过Java代码处理数据库返回的列表:
import com.google.gson.Gson; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; // 对应数据库返回的单条数据实体类 class DeptMun { private String coddpt; private String namedpt; private String codmun; private String namemun; // 构造方法、getter/setter方法省略 } public class DataConverter { public static void main(String[] args) { List<DeptMun> dataList = /* 从数据库获取的实体列表 */; Map<String, List<String>> resultMap = new HashMap<>(); for (DeptMun item : dataList) { String deptName = item.getNamedpt().trim(); String munName = item.getNamemun().trim(); // 初始化部门对应的市镇列表 resultMap.computeIfAbsent(deptName, k -> new ArrayList<>()); // 避免重复添加市镇 if (!resultMap.get(deptName).contains(munName)) { resultMap.get(deptName).add(munName); } } // 转换为JSON字符串返回前端 Gson gson = new Gson(); String jsonResult = gson.toJson(resultMap); System.out.println(jsonResult); } }
内容的提问来源于stack exchange,提问作者Humberto Enrique
相关产品推荐
相关产品推荐

