动态创建 JSONObject Java

Create JSONObject dynamically Java

我在 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一年中的几个月,但是如果例如查询没有 return 一个或多个特定月份的数量,我想将其表示为零。

使用我的代码,我得到以下结果 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 依赖。