使用GSON解析JSON列表的第一个元素

4
在我的项目中,我使用GSON来序列化和反序列化对象。经常从服务器以JSON格式获取对象列表,但我只对列表的第一个元素感兴趣。使用@SerializedName可以仅获取列表的第一个元素吗?
我想到了这样的方法:@SerializedName("List[0]") 还是您有其他建议,如何仅解析第一个元素而不是整个列表?

也许这个链接会有用:https://stackoverflow.com/questions/41323887/partial-gson-deserialization - msanford
1个回答

4

您应该使用自定义JsonDeserializer

private class MyCustomDeserializer implements JsonDeserializer<MyModel> {

  @Override
  public MyCustomDeserializer deserialize(JsonElement json, Type type,
        JsonDeserializationContext context) throws JsonParseException {

    // initialize an instance of your model
    MyModel myModel = new MyModel();

    JsonArray jArray = (JsonArray) json; // get json array
    JsonObject jsonObject = (JsonObject) jArray.get(0); // get first object

    // do what you want with the first object
    myModel.setParameter(jsonObject.get("parameter").getAsInt());

    // ignore next json objects
    return myModel;
  } 
}

那么,您可以按照以下方式初始化您的Gson实例:

GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(MyModel.class, new MyCustomDeserializer());
Gson gson = gsonBuilder.create();
MyModel model = gson.fromJson(jsonString, MyModel.class);

如果你想在序列化时排除某些字段,你需要在模型中将它们声明为 transient

private transient String name; // will be ignored from Gson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接