如果您一直有,
object或者
one-element array可以编写自定义反序列化器,如下所示:
class OneOrElementJsonDeserializer<T> implements JsonDeserializer<T> { @Override public T deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { if (json instanceof JsonArray) { final JsonArray array = (JsonArray) json; final int size = array.size(); if (size == 0) { return null; } return context.deserialize(array.get(0), typeOfT); } return context.deserialize(json, typeOfT); }}简化后的示例模型如下所示:
class User { @JsonAdapter(OneOrElementJsonDeserializer.class) private Data data; public User() { } public User(Data data) { super(); this.data = data; } public Data getData() { return data; } public void setData(Data data) { this.data = data; } @Override public String toString() { return "User{" + "data=" + data + '}'; }}class Data { private String id; protected String getId() { return id; } public void setId(String id) { this.id = id; } @Override public String toString() { return "Data{" + "id='" + id + ''' + '}'; }}用法示例:
import com.google.gson.Gson;import com.google.gson.GsonBuilder;import com.google.gson.JsonArray;import com.google.gson.JsonDeserializationContext;import com.google.gson.JsonDeserializer;import com.google.gson.JsonElement;import com.google.gson.JsonParseException;import com.google.gson.annotations.JsonAdapter;import java.io.File;import java.io.FileReader;import java.lang.reflect.Type;public class GsonApp { public static void main(String[] args) throws Exception { File jsonFile = new File("./resource/test.json").getAbsoluteFile(); Gson gson = new GsonBuilder() .setPrettyPrinting() .create(); User root = gson.fromJson(new FileReader(jsonFile), User.class); System.out.println(root); }}上面的代码用于下面的
JSON有效负载:
{ "data": [ { "id": "c87ca3fe85781007869b83f" } ]}印刷品:
User{data=Data{id='c87ca3fe85781007869b83f'}}而对于
object案件
JSON的有效载荷:
{ "data": { "id": "c87ca3fe85781007869b83f" }}印刷品:
User{data=Data{id='c87ca3fe85781007869b83f'}}如果您的媒体资源可以包含
JSON object或
multi-elementarray看到我对此问题的回答(将Json数组映射到Java模型)。实现了反序列化程序,可以处理这种情况。



