Java 使用GSON解析混合类型字段?

Java 使用GSON解析混合类型字段?,java,android,json,gson,Java,Android,Json,Gson,如何将GSON与混合类型字段一起使用,是否可能 { 'field': false } // or { 'field': [ 1,2,3,4 ] } 我的GSON课程: public class MyModel { public HashMap<ArrayList,Boolean> blockedusers; } 公共类MyModel{ 公共HashMap blockedusers; } 是的,这是可能的,但您必须处理json是数组还是基元类

如何将GSON与混合类型字段一起使用,是否可能

{
  'field': false
}

// or

{
  'field': [
    1,2,3,4
  ]
}
我的GSON课程:

public class MyModel {

    public  HashMap<ArrayList,Boolean>  blockedusers;

}
公共类MyModel{
公共HashMap blockedusers;
}

是的,这是可能的,但您必须处理json是数组还是基元类型。请尝试以下代码:

String case1 = "{'field':false}";
String case2 = "{'field':[1,2,3,4]}";
JsonElement jsonElement = ((JsonObject)(new JsonParser().parse(case1))).get("field");

if(jsonElement instanceof JsonArray) {
    JsonArray jsonArray = (JsonArray)jsonElement;
    if(jsonArray != null && jsonArray.size() > 0) {
        for (JsonElement aJsonElement : jsonArray) {
            // TODO: handle json element inside array 
            System.out.println(aJsonElement);
        }
    }
} else if (jsonElement instanceof JsonPrimitive) {
    boolean value = jsonElement.getAsBoolean();
    System.out.println("value:" + value);
}
您还可以编写自定义的
类型适配器
。看

如中所述

我认为您必须定义一个自定义反序列化程序:

公共类MyJsonDeserializer实现JsonDeserializer{
@凌驾
PublicYourParsedData反序列化(最终JsonElement je、最终类型类型、最终JsonDeserialization上下文jdc)引发JsonParseException
{
final JsonObject obj=je.getAsJsonObject();//我们原始的完整json字符串
最终JsonElement serviceElement=obj.get(“字段”);
//这里我们提供了处理顽皮元素的功能。emtpy字符串似乎是作为JsonPrimitive返回的…所以有一个选项
if(JsonPrimitive的serviceElement实例)
{
//获取布尔值
}
返回您的parseddata.create();//提供接收解析数据的功能
}
}
您可以将其用于:

Gson gson = new GsonBuilder()
    .registerTypeAdapter(ServiceState.class, new ServiceDeserializer())
    .create();