Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Gson反序列化中折叠嵌套结构?_Java_Android_Json_Gson_Deserialization - Fatal编程技术网

Java 如何在Gson反序列化中折叠嵌套结构?

Java 如何在Gson反序列化中折叠嵌套结构?,java,android,json,gson,deserialization,Java,Android,Json,Gson,Deserialization,我正在为一个服务构建一个API客户端,该服务在JSON响应中使用了大量深度嵌套的对象/数组。例如: "foo":{ "name":"something", "id":1 "data":{ "items":[ ... //item objects ... ] } } 我希望我解析的foo类跳过数据成员,如下所示: class Foo {

我正在为一个服务构建一个API客户端,该服务在JSON响应中使用了大量深度嵌套的对象/数组。例如:

"foo":{
    "name":"something",
    "id":1
    "data":{
        "items":[
             ...
             //item objects
             ...
        ]        
    }
}
我希望我解析的foo类跳过数据成员,如下所示:

class Foo {
    int id;
    String name;
    List<Item> items;
}

在消除响应数据中的数据层的同时,使用Gson解析JSON的最佳方法是什么?

最简单的方法是添加一个包装器对象,而无需编写自定义反序列化程序

class Foo {
  private int id;
  private String name;
  private Data data;

  static class Data {
    List<Item> items;
  }

  public int getId() { return id; }
  public String getName() { return name; }     
  public List<Item> getItems() { return data.items; }
}

使用私有字段并使用getter方法,包装器数据对象永远不会暴露于公共API,因此功能上是相同的。

不编写自定义反序列化程序的最简单方法就是添加包装器对象

class Foo {
  private int id;
  private String name;
  private Data data;

  static class Data {
    List<Item> items;
  }

  public int getId() { return id; }
  public String getName() { return name; }     
  public List<Item> getItems() { return data.items; }
}
通过使用私有字段和getter方法,包装器数据对象永远不会暴露于公共API,因此在功能上是相同的