使用Gson从JSON删除空集合

ng

我想使用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,我检查了文档,也没有方法...

请任何建议。

非常感谢阅读本文的人!

布拉吉

遵循的步骤:

  • 将JSON字符串转换为Map<String,Object>使用Gson#fromJson()
  • 迭代地图,并从地图中删除条目null或为空ArrayListMap
  • 使用Gson#toJson()从最终映射中形成JSON String

注意:使用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();
        }
    } else if (entry.getValue() instanceof Map){ //removes empty json objects {}
        Map<?, ?> m = (Map<?, ?>)entry.getValue();
        if(m.isEmpty()) {
           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
  }

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Json.NET序列化时如何省略空集合

来自分类Dev

区分WebParam中的空集合和空集合

来自分类Dev

空集合视图Swift

来自分类Dev

LINQ 到空集合

来自分类Dev

Groups API 空集合

来自分类Dev

使用gong-wpf放入空集合

来自分类Dev

使用Mapster映射时,获取空集合而不是null

来自分类Dev

从方法返回空集合

来自分类Dev

Automapper空集合变为空

来自分类Dev

从方法返回空集合

来自分类Dev

“java.lang.UnsupportedOperationException:空集合”

来自分类Dev

ASP.NET Web API在json响应中返回空集合

来自分类Dev

Azure数据工厂-展平JSON时跳过具有空集合引用的行

来自分类Dev

空集合vs空返回?内存使用量的缺点有多大?

来自分类Dev

猫鼬-使用post方法创建一个新的空集合

来自分类Dev

使NA的NA的空集合/集合的总和而不是0?

来自分类Dev

JAXB将空列表映射到空集合?

来自分类Dev

如何合并.Max()以查询LINQ to EF中的空集合?

来自分类Dev

NavigationProperty.GetDependentProperties()返回一个空集合

来自分类Dev

空集合的联接结果是什么

来自分类Dev

实体DbSet和Any()在空集合上产生true

来自分类Dev

.First不会在空集合上引发异常

来自分类Dev

在空集合上未创建电机索引

来自分类Dev

C#Linq-获取不为空集合的对象

来自分类Dev

MongoDB | 如何仅显示非空集合?

来自分类Dev

.First不会在空集合上引发异常

来自分类Dev

NavigationProperty.GetDependentProperties()返回一个空集合

来自分类Dev

从转储还原后,MongoDB仍显示空集合

来自分类Dev

在空集合上未创建电机索引