动态创建 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
我做错了什么?
在你的情况下,看起来没有真正的理由通过 JSONObject
s 进行手动 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
依赖。
我在 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
我做错了什么?
在你的情况下,看起来没有真正的理由通过 JSONObject
s 进行手动 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
依赖。