在一个类GSON中列出<object>而不是多个对象

时间:2016-10-22 15:43:51

标签: android json

为了简化我的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<BusStop>的内容,因为我的json不仅有2条路线。

如何实现?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

目前尚不清楚哪些站点/地理位置包含,但由于您使用了数组表示法,我假设它们都包含对象列表。