2016-09-12 51 views
3

JAVA Androidの中で1からfalseにブールをデシリアライズ:私はJSONの残りの部分を削除したGsonは、私は次のように使用していたクラス

[{"jobId":"2","jobDescription":"Beta","jobAdditionalInfo":"Edited ","jobAddress":"103 Emus Avenue \nCenturion \n0157 \nSouth Africa \n","jobActive":"1","offsiteAllowed":"1"}] 

public class TheJob {  
    private String jobDescription = null, jobAdditionalInfo = null, jobAddress = null; 

    @SerializedName("jobActive") 
    public boolean jobActive = true; 

    @SerializedName("offsiteAllowed") 
    public boolean offsiteAllowed; 
} 

私は次のように受け取るJSONを配列の項目は全く同じであるため私が正しく構文解析するブールフィールドjobActiveとoffsiteAllowedを取得することはできません

、彼らは常にJSON値が完全にブール以外

私TheJobクラスデserialises内の他の1

すべてであっても偽解析しますどんな提案も大歓迎です。

+1

ブール値にカスタムデシリアライザを使用する[可能な重複をチェックこのリンク](http://stackoverflow.com/questions/27176134/gson-integer-to-boolean-for-specific-fields) –

答えて

1

Gsonは非常にタイプ指向です。 int値をブール値として解析するには、カスタムブール値逆シリアル化クラスを登録する必要があります。あるいは、あなたがapiの変更を制御している場合は、1ではなくtrueに戻ります。これは、「true」と期待して、他のすべてをfalseとして扱います。カスタムのJsonDeserializerクラスを登録する例がいくつかあります。このアダプタを使用すると、isFruitというブール型変数に逆シリアル化し、APIからApple、Orange、Carrotなどを返すような処理を行うことができます。いったん登録されると、カスタムデシリアライザを実装して値を評価し、必要に応じてisFruitに真と偽を非直列化することができます。

1

これを達成する最も簡単な方法は、自分でデータを確認して変更することです。私は通常、このようUtilのクラスの静的メソッドを作る:

parseTypedBoolean(JsonObject obj, String... keys); 

これは、0と1として保存されているすべてのブール値を解析することが容易になります。

for (String key : keys) { 
    if (obj.getInt(key) == 1) { 
     obj.put(key, true); 
    } else obj.put(key, false); 
} 

各データがフェッチした後:

JSONObject curr = response.getJSONObject(i); 
toBoolean(curr, "is_available", "is_new", "is_parsed", "is_registered" ,...); 

あなたはこの頻繁に使用するキーの列挙型を持つことができます。

関連する問題