Android 列表<;对象>;而不是一个类中的多个对象

Android 列表<;对象>;而不是一个类中的多个对象,android,json,Android,Json,为了简化,我使用了结构如下的json字符串: { "route": { "bus-1": { "stations": [ ], "geo": [ ] }, "bus-2": { "stations": [ ], "geo": [ ] } }, "routesRever

为了简化,我使用了结构如下的
json
字符串:

{
  "route": {
    "bus-1": {
      "stations": [            
      ],
      "geo": [            
      ]
    },
    "bus-2": {
      "stations": [            
      ],
      "geo": [          
      ]
    }
  },
  "routesReverse": {
    "bus-1": {
      "stations": [           
      ],
      "geo": [            
      ]
    },
    "bus-2": {
      "stations": [            
      ],
      "geo": [
      ]
    }
  }
}
我正在尝试使用GSON来解析它:

public class MainJson {

    @SerializedName("route")
    @Expose
    public Routes route;
    @SerializedName("routesReverse")
    @Expose
    public Routes routesReverse;

    public Routes getRoute() {
        return route;
    }

    public Routes getRoutesReverse() {
        return routesReverse;
    }
}
我创建了所有模型,但我对该模型有一个问题:

public class Routes {

    @SerializedName("bus-1")
    @Expose
    BusStop busStop1;

    @SerializedName("bus-2")
    @Expose
    BusStop busStop2;

    public BusStop getBusStop1() {
        return busStop1;
    }

    public BusStop getBusStop2() {
        return busStop2;
    }
}
我不喜欢用这种方法为每条公交线路创建带有注释的
BusStop
对象,我想创建类似于
List
的东西,因为我的
json
不仅仅有两条线路


如何实现这一点?

您能否修改接收到的json的结构?因为最简单的方法是在“route”json对象中有一个名为“bus”的数组,而不是多个“bus-i”对象。如果您不能修改json,那么我认为GSON中没有任何方便的解决方案,因为它将对象1映射到1,即使您应用了“alternate”标记。查看@SerializedName注释的文档。

//每个对象只是一个公交站点列表
公共类MainJson{
@暴露
公开名单路线;
@暴露
公开列表路由转发;
公共列表getRoute(){
返回路线;
}
公共列表getRouteReverse(){
返回路线倒转;
}
}
公务舱巴士站{
@暴露
列出电台名单;
@暴露
列出地理位置;
公共广播电台名单(){
返回站;
}
公共列表getGeo(){
返回geo;
}
}

不清楚stations/geo包含什么,但由于您使用了数组表示法,我假设它们每个都包含一个对象列表。

如果您出于某种原因无法修改json,我会亲自为GSON(类似)编写一些自定义TypeAdapter来处理此问题。不幸的是,不,我无法修改,因为结构庞大,GSON不是目标,您可以建议您在模型中使用的任何方法I have exception:java.lang.IllegalStateException:BEGIN\u数组,但是BEGIN_OBJECT@VLeonovs请共享导致此异常的代码,我假设这是在尝试序列化/反序列化mainJson mainJson=gson.fromJson(jsonString,mainJson.class)时发生的;在这之后,我有这个exception@VLeonovs因此看起来
route
routesReverse
实际上不是数组,因为它们使用
{}
符号。如果希望它们包含N个
总线停止
,则必须使用
[]
将其集合标记为一个数组。如果无法更改JSON结构,那么您将无法创建
列表
,因为该列表只能在对象包含数组时使用。
//Each object is just a list of bus stops
public class MainJson {
    @Expose
    public List<BusStop> route;

    @Expose
    public List<BusStop> routesReverse;

    public List<BusStop> getRoute() {
        return route;
    }

    public List<BusStop> getRoutesReverse() {
        return routesReverse;
    }
}

public class BusStop {
    @Expose
    List<Object> stations;

    @Expose
    List<Object> geo;

    public List<Object> getStations() {
        return stations;
    }

    public List<Object> getGeo() {
        return geo;
    }
}