Gsonを使用して、未知の原始的なJSONのプロパティ型をデシリアライズする方法

タハ:

整数、ブールまたは文字列型を使用できGsonに簡単なJSONObject(またはJSONArray)が、「値」プロパティを使用してデシリアライズするための最良の方法は何ですか

{"label":"Label", "value":56}
{"label":"Label", "value":false}
{"label":"Label", "value":"string value"}

クラスで

public class ViewPair {
    @SerializedName("label")
    private String label;
    @SerializedName("value")
    private <Unknown> value;

デッドプールの助言として、私はJsonPrimitiveタイプを試してみましたが、私はこのようなViewPairから値を取得したい時はいつでもエラーが表示されます。

Gson gson=new Gson();
List<ViewPair>data = gson.fromJson(array.toString(), listType);
JSONObject object = item.getJSONObject("value");
String spinnerLabel=object.getString("label");
JsonPrimitive spinnerValue=(JsonPrimitive) object.get("value");<-error
Caused by: java.lang.ClassCastException: java.lang.Boolean cannot be cast to com.google.gson.JsonPrimitive
デッドプール :

あなたはとしてそれを解析することができますJsonPrimitiveそれはタイプチェックする方法を持っているのでisBooleanISNUMBERisStringを値を取得する方法だけでなく、

public class ViewPair {

   @SerializedName("label")
   private String label;

   @SerializedName("value")
   private JsonPrimitive value;

}

ここで私はこれらの3つのシナリオをテストぐるぐる例です。

ViewPair targetObject1 = new Gson().fromJson("{\"label\":\"Label\", \"value\":56}", ViewPair.class);
ViewPair targetObject2 = new Gson().fromJson("{\"label\":\"Label\", \"value\":false}", ViewPair.class);
ViewPair targetObject3 = new Gson().fromJson("{\"label\":\"Label\", \"value\":\"string value\"}", ViewPair.class);

JsonObjectあなたが直接取得することができますJsonPrimitive

JsonPrimitive object = item.getAsJsonPrimitive("value");

以下とからJsonPrimitive、あなたが必要なタイプの値を取得することができます

object.getAsString()
object.getAsInt()
object.getAsBoolean()

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=14330&siteId=1