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

请求将数据库返回的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 20:47:01