使用Gson从JSON中删除空集合

我想使用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,我检查文档,那里没有任何方法……

请提出任何建议。

非常感谢读这篇文章!

要遵循的步骤:

  • 使用Gson#fromJson()将JSON字符串转换为Map
  • 迭代地图并从地图中删除null或空ArrayList的条目。
  • 使用Gson#toJson()从最终地图返回JSON字符串。

注意:使用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>() {}.getType(); Map data = new Gson().fromJson(jsonString, type); for (Iterator> it = data.entrySet().iterator(); it.hasNext();) { Map.Entry 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 }