2017-12-08 9 views
0

GSONパーサーを使用してAndroidでJSONを解析するとき、プロパティ値に基づいてオブジェクトが作成されないよう除外するルールを実装したいと思います。例:カスタムGSONパーサーがプロパティ値に基づいてオブジェクトインスタンスを除外

{"people": [ 
    {"first_name": "Bob"}, 
    {"first_name": "Bob", "last_name": "Loblaw"}]} 

姓のプロパティがないため、最初の人物オブジェクトを除外します。

これは解析時に可能ですか?

答えて

1

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; 
    } 
} 

ようJsonDeserializerが、その後

のように使用することができ作成

public class Response { 
    @Getter 
    private List<Person> people = new ArrayList<>(); 
} 

public class Person { 
    @Getter @Setter 
    private String first_name, last_name; 
} 

のようなPOJOを持っているだろうと仮定します10

これは、解析時に実行する必要がある場合です。それ以外の場合は、構文解析後にPeopleをループし、Personを姓を除いて除外する方がよいでしょう。

+0

丁寧に回答しています。私はここに近づくつもりです。この時点で解析した後にデータを消去すると思います。 – airowe

関連する問題