关于 Gson 解析 json 数据

2019-04-28 23:35:56 +08:00
 Nitroethane

现有服务端返回的数据格式如下:

{
  "success": true,
  "data": [
    {
      "label": "高清频道",
      "id": 1,
      "expanded": false,
      "children": [
        {
          "label": "CCTV1 综合高清",
          "id": 1,
          "actionUrl": "/tv-show-detail/1",
          "imgUrl": "/cover/tv/1.jpg",
          "current": {
            "name": "瞬间中国",
            "time": "15:15-15:23"
          }
         },
        {
          "label": "CCTV2 财经高清",
          "id": 2,
          "actionUrl": "/tv-show-detail/2",
          "imgUrl": "/cover/tv/2.jpg",
          "current": {
            "name": "周末特供",
            "time": "15:20-15:42"
          }
         },
        {
          "label": "BTV6 体育高清",
          "id": 19,
          "actionUrl": "/tv-show-detail/19",
          "imgUrl": "/cover/tv/19.jpg",
          "current": false
         }
       ]
     }
   ]
}

children 字段里元素对应的类的定义为(使用的 Retrofit 和 Gson ):

public class Channel {
    @SerializedName("label")
    private String label;
    @SerializedName("id")
    private int id;
    @SerializedName("actionUrl")
    private String actionUrl;
    @SerializedName("imgUrl")
    private String imgUrl;
    @SerializedName("current")
    private CurrentShow current;
    ......

CurrentShow 是我定义的用来解析 current 字段的:

public class CurrentShow {
    private String name;
    private String time;
    private boolean empty;
    ...

现在的问题是,如果 current 字段为空的话值是 false,否则是 nametime 字段,所以上面这个 CurrentShow 用来处理 current 字段是有问题的。这个应该怎么处理呢?

11189 次点击
所在节点    Android
26 条回复
TommyLemon
2019-04-29 11:02:41 +08:00
@CononYc 对的,我在 #16 楼也说了,还提供了代码
LemonCoo1
2019-04-29 11:18:27 +08:00
@abbenyyy java 想这么写还挺难的吧,都是定义好的类型怎么又是 boolean 又是 object,除非你直接用 jsonobject、map 啥的
TommyLemon
2019-04-29 14:34:54 +08:00
@LemonCoo1 是的,静态类型定义好就不好改了,这个约束对前端是很利好的,如果还会变,只能说后端故意的。
APIJSON 很好地解决了类型不稳定等 前后端接口的 沟通、文档、联调 10 大痛点哦。

Node.ts, Python, PHP, Java, C#, Go 等多种语言后端实现,Android, iOS, JavaScript 等多端的 Demo,
还有各种文档、视频教程、在线工具等。

创作不易,GitHub 右上角点 Star 支持下吧 ^_^
https://github.com/TommyLemon/APIJSON/wiki
TommyLemon
2019-04-29 14:36:13 +08:00
TommyLemon
2019-04-29 14:36:40 +08:00
@TommyLemon #23 楼给了很好的解决方案哦
RockOrRoll
2019-04-30 08:39:52 +08:00
@TommyLemon 消停点吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/559610

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX