我想使用gson删除具有空集合或空值的属性。
Aiperiodo periodo = periodoService(); //periodo comes from a service method with a lot of values Gson gson = new Gson(); String json = gson.toJson(periodo);
我打印json,我有这个:
{"idPeriodo":121,"codigo":"2014II", "activo":false,"tipoPeriodo":1, "fechaInicioPreMatricula":"may 1, 2014", "fechaFinPreMatricula":"jul 1, 2014", "fechaInicioMatricula":"jul 15, 2014", "fechaFinMatricula":"ago 3, 2014", "fechaInicioClase":"ago 9, 2014", "fechaFinClase":"dic 14, 2014", "fechaActa":"ene 15, 2015", "fechaUltModificacion":"May 28, 2014 12:28:26 PM", "usuarioModificacion":1,"aiAvisos":[], "aiAlumnoCarreraConvalidacionCursos":[], "aiAlumnoMatriculas":[],"aiMallaCurriculars":[], "aiAlumnoCarreraEstados":[],"aiAdmisionGrupos":[], "aiMatriculaCronogramaCabeceras":[], "aiAlumnoCarreraConvalidacions":[], "aiHorarioHorases":[],"aiAsistencias":[], "aiAlumnoPreMatriculas":[], "aiAlumnoMatriculaCursoNotaDetalles":[], "aiOfertaAcademicas":[],"aiTarifarios":[]}
例如,对于该json,我不想拥有集合aiAvisos,有一种方法可以将其从json中删除。我实际上正在处理很多集合,在这里我展示了一个集合,我确实需要从json中删除它们。
我需要这样的东西:
{"idPeriodo":121,"codigo":"2014II", "activo":false,"tipoPeriodo":1, "fechaInicioPreMatricula":"may 1, 2014", "fechaFinPreMatricula":"jul 1, 2014", "fechaInicioMatricula":"jul 15, 2014", "fechaFinMatricula":"ago 3, 2014", "fechaInicioClase":"ago 9, 2014", "fechaFinClase":"dic 14, 2014", "fechaActa":"ene 15, 2015", "fechaUltModificacion":"May 28, 2014 12:28:26 PM", "usuarioModificacion":1}
我尝试将集合设置为null,我检查了文档,也没有方法…
请任何建议。
非常感谢阅读本文的人!
Map<String,Object>
null
ArrayList
注意: 使用GsonBuilder#setPrettyPrinting()将Gson配置为输出适合页面进行漂亮打印的Json。
样例代码:
import java.lang.reflect.Type; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken; ... Type type = new TypeToken<Map<String, Object>>() {}.getType(); Map<String, Object> data = new Gson().fromJson(jsonString, type); for (Iterator<Map.Entry<String, Object>> it = data.entrySet().iterator(); it.hasNext();) { Map.Entry<String, Object> entry = it.next(); if (entry.getValue() == null) { it.remove(); } else if (entry.getValue().getClass().equals(ArrayList.class)) { if (((ArrayList<?>) entry.getValue()).size() == 0) { it.remove(); } } } String json = new GsonBuilder().setPrettyPrinting().create().toJson(data); System.out.println(json);
输出;
{ "idPeriodo": 121.0, "codigo": "2014II", "activo": false, "tipoPeriodo": 1.0, "fechaInicioPreMatricula": "may 1, 2014", "fechaFinPreMatricula": "jul 1, 2014", "fechaInicioMatricula": "jul 15, 2014", "fechaFinMatricula": "ago 3, 2014", "fechaInicioClase": "ago 9, 2014", "fechaFinClase": "dic 14, 2014", "fechaActa": "ene 15, 2015", "fechaUltModificacion": "May 28, 2014 12:28:26 PM", "usuarioModificacion": 1.0 }