Android 自定义GSON解析器基于属性值排除对象实例
当使用GSON解析器在Android中解析JSON时,我想实现一个规则,该规则将根据属性值排除创建的任何对象。例如:Android 自定义GSON解析器基于属性值排除对象实例,android,json,gson,Android,Json,Gson,当使用GSON解析器在Android中解析JSON时,我想实现一个规则,该规则将根据属性值排除创建的任何对象。例如: {"people": [ {"first_name": "Bob"}, {"first_name": "Bob", "last_name": "Loblaw"}]} 我想排除第一人称对象,因为它没有姓氏属性 在解析时可以这样做吗?使用JsonDeserializer可以这样做 假设你喜欢波乔 public class Response { @Getter
{"people": [
{"first_name": "Bob"},
{"first_name": "Bob", "last_name": "Loblaw"}]}
我想排除第一人称对象,因为它没有姓氏属性
在解析时可以这样做吗?使用JsonDeserializer可以这样做
假设你喜欢波乔
public class Response {
@Getter
private List<Person> people = new ArrayList<>();
}
创建类似JsonDeserializer的
因此,这是如果需要在解析时完成的话。也许在解析后循环人员并排除没有姓氏的人员会更好。回答得好,我将尽可能接近这里。我想我会在解析之后清理数据。
public class Person {
@Getter @Setter
private String first_name, last_name;
}
public class PersonResponseDeserializer implements JsonDeserializer<Response> {
// Create a new gson to make the default parsing for response object
private final Gson gson = new Gson();
@Override
public Response deserialize(JsonElement json, Type typeOfT
, JsonDeserializationContext context) throws JsonParseException {
Response r = gson.fromJson(json, typeOfT);
// Remove all persons from R that have last name null
r.getPeople().removeAll(
r.getPeople().stream().filter( p -> p.getLast_name() == null )
.collect(Collectors.toSet())
);
return r;
}
}
Gson gson = new GsonBuilder()
.registerTypeAdapter(Response.class, new PersonResponseDeserializer())
.create();
Response r = gson.fromJson(s, Response.class);