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;
}
}