动态创建 JSONObject Java

大卫182009

我在 SpringBoot 中有一个项目,我希望创建一个 JSON 对象以发送到我的 FrontEnd 项目,我希望创建一个这样的 JSON:

{    "result": {    "data": [      {        "month": "January",        "APERTURAS": 0      },      {        "month": "February",        "APERTURAS": 0      },      {        "month": "March",        "APERTURAS": 0      },      {        "month": "April",        "APERTURAS": 0      },      {        "month": "May",        "APERTURAS": 0      },      {        "month": "June",        "APERTURAS": 0      },      {        "month": "July",        "APERTURAS": 0      },      {        "month": "August",        "APERTURAS": 3      },      {        "month": "September",        "APERTURAS": 11      },      {        "month": "October",        "APERTURAS": 3      },      {        "month": "November",        "APERTURAS": 0      },      {        "month": "December",        "APERTURAS": 0      }    ]    }    }

在这一个中,每月总计金额,我正在查询,并以此获得有信息的月份,我需要使用一年中所有月份的信息创建 json,但是如果例如查询不返回特定月份或月份的金额,我想用零表示。

使用我的代码,我得到以下 JSON:

{  "result": {    "data": [      {},      {},      {},      {},      {},      {},      {},      {},      {},      {},      {},      {},      {},      {},      {},      {},      {},      {},      {},      {},      {},      {        "APERTURAS": 0,        "month": "August"      },      {},      {},      {},      {        "APERTURAS": 0,        "month": "September"      },      {},      {},      {},      {        "APERTURAS": 3,        "month": "October"      },      {},      {},      {},      {},      {},      {}    ]  }}

这是我的代码:

private static final String[] MESES_COMPLETO = {"January", "February", "March", "April", "May", "June", "July", 
        "August", "September", "October", "November", "December"};

List<ReporteTipoActoMesInterfaceDTO> resultadoAperturas = repositorioReporte.reporteTipoActoAperturaMes(String.valueOf(year));

List<Object> reporteList = new ArrayList<Object>();     
JSONObject reporteJson = new JSONObject();

for (int j = 0; j < MESES_COMPLETO.length; j++) {

JSONObject reporteJson = new JSONObject();
            
for (int k = 0; k < resultadoAperturas.size(); k++) {
    JSONObject reporteJson2 = new JSONObject();
    String mes = resultadoAperturas.get(k).getmes().replaceAll("\\s+","");
                
    if (!MESES_COMPLETO[j].equals(mes)) {                       
        reporteJson.put("month", MESES_COMPLETO[j]);
        reporteJson.put("APERTURAS", 0);
        reporteList.add(reporteJson2);
    } 
    else {

        if (Arrays.asList(MESES_COMPLETO[j]).contains(mes)) {

            reporteJson.put("month", mes);
            reporteJson.put("APERTURAS", resultadoAperturas.get(k).getexpedientes());
            reporteList.add(reporteJson);
        }
    }
}
}       
        
JSONObject jsonData = new JSONObject();
jsonData.put("data", reporteList);
        
jsonResponse = new JSONObject().put("result", jsonData).toString();

这是 DTO

public interface ReporteTipoActoMesInterfaceDTO {

Long getexpedientes();

String getmes();
}

这是查询的结果

EXPEDIENTES MES
3           August    
11          September
3           October

我究竟做错了什么?

德卡德

在您的情况下,似乎没有真正的理由通过JSONObjects 进行手动 JSON 构造。

只需定义您的 DTO 以匹配所需的 JSON 结构,用您的数据填充它并使用 Jackson 将其完全序列化。

DTO:

    @Data
    class ResultDto {
        DataDto result;

        @Data
        static class DataDto {
            List<MonthDataDto> data;
        }

        @Data
        static class MonthDataDto {
            String month;
            @JsonProperty("APERTURAS")
            Integer aperturas;
        }
    }

序列化:

ResultDto resultDto = ...
String jsonResponse = new ObjectMapper().writeValueAsString(resultDto);

确保com.fasterxml.jackson.core:jackson-databind在您的项目中具有依赖关系。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章