【问题标题】:GSON different value for same key相同键的 GSON 不同值
【发布时间】:2016-08-29 06:22:21
【问题描述】:

我目前正在为我的 Android 项目使用 Gson 和 Retrofit,它们会自动解析我所需的 API。但是,我意识到 API 包含一个值,它可以是布尔值或对象,用于 API 中不同类型的数据。

例如

    ...
        {
          "media": false,
        },
        {
          "media": {
            "mp4": "http://sample.com/something.mp4",
"jpg": "http://sample.com/something.jpg",
         }
        },
    ...

我的 Gson 模型应该是什么样的?

@SerializedName("media")
Object images;

【问题讨论】:

  • 使用泛型类型 T.
  • 可以改json的key吗?它使含义混乱。
  • 可以是JsonElement
  • “错误的 JSON 格式接受”从来没有这样的 JSON 接受具有不同值的相同键,这是不好的开发方式。避免在应用程序中进行类型转换。
  • 我希望我可以更改 API。但我正在创建一个使用 API 的第三方应用程序。 :( 会尝试使用泛型类型。

标签: java android gson


【解决方案1】:

使用Object 解析没有错。在使用解析后的数据时,只需使用instanceof 来检查数据的类型。

例如:object instanceof Boolean 表示布尔值。

编辑: 为 url 创建一个模型类。喜欢:

public class Urls {

@SerializedName("mp4")
private String mp4Url;

@SerializedName("jpg")
private String jpgUrl;

public String getMp4Url() {
    return mp4Url;
}

public String getJpgUrl() {
    return jpgUrl;
}

}

现在检查

if(parsedObject instanceof Urls) {
    Urls urls = (Urls) parsedObject;
    urls.getMp4Url;
}

【讨论】:

  • 我如何将对象“转换”为另一个 Gson 类,我可以在其中 m.getMp4()m.getJpg()?我尝试强制转换和 Gson.fromJson 但似乎没有任何效果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-16
  • 2016-06-14
  • 1970-01-01
  • 1970-01-01
  • 2015-09-06
  • 1970-01-01
相关资源
最近更新 更多