J'utilise Gson et je me trouve dans une situation dans laquelle je dois réduire la taille de certaines chaînes Json. Je voudrais le faire en faisant en sorte qu'il ne mette pas d'objets nuls, mais uniquement des valeurs vides, ainsi que des listes et des tableaux vides dans la chaîne Json.
Y a-t-il un moyen simple de le faire?
Laissez-moi clarifier un peu: je veux que tout ce qui dit: emptyProp: {} ou emptyArray: [] soit ignoré. Je souhaite que tout objet contenant uniquement des propriétés vides soit ignoré.
Les valeurs NULL sont exclues par défaut tant que vous ne définissez pas serializeNulls () sur votre GsonBuilder.
Un moyen de créer des listes vides consiste à créer un JsonSerializer
class CollectionAdapter implements JsonSerializer<List<?>> {
@Override
public JsonElement serialize(List<?> src, Type typeOfSrc, JsonSerializationContext context) {
if (src == null || src.isEmpty()) // exclusion is made here
return null;
JsonArray array = new JsonArray();
for (Object child : src) {
JsonElement element = context.serialize(child);
array.add(element);
}
return array;
}
}
Puis enregistrez-le
Gson gson = new GsonBuilder().registerTypeHierarchyAdapter(Collection.class, new CollectionAdapter()).create();
Selon PomPom a HashMap peut être sérialisé via:
class MapAdapter implements JsonSerializer<Map<?, ?>> {
@Override
public JsonElement serialize(Map<?, ?> src, Type typeOfSrc,JsonSerializationContext context) {
if (src == null || src.isEmpty())
return null;
JsonObject obj = new JsonObject();
for (Map.Entry<?, ?> entry : src.entrySet()) {
obj.add(entry.getKey().toString(), context.serialize(entry.getValue()));
}
return obj;
}
}