使用GSON解析器在Android中解析JSON时,我想实现一个规则,该规则将根据属性值排除任何对象的创建。例如:
{"people": [
{"first_name": "Bob"},
{"first_name": "Bob", "last_name": "Loblaw"}]}
我想排除第一个人对象,因为它没有姓氏属性。
解析时是否可以这样做?
答案 0 :(得分:1)
可以使用JsonDeserializer
。
假设您有像
这样的POJOpublic class Response {
@Getter
private List<Person> people = new ArrayList<>();
}
和
public class Person {
@Getter @Setter
private String first_name, last_name;
}
创建JsonDeserializer
之类的
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);
因此,如果需要在解析时完成。也许最好在解析后循环People
,然后排除没有姓氏的Person
。