【问题标题】:retrofit : deal with property that can be either empty string or an array改造:处理可以是空字符串或数组的属性
【发布时间】:2016-07-24 15:48:23
【问题描述】:

我正在使用 Retrofit2,我被要求使用以下 json:

{ "状态":"成功", 有效载荷{ “道具1”:1234, "prop2": "" } }

问题在于 prop2 可以是空字符串或对象数组。 (空数组不是他们的选择)

我不记得 Retrofit 有处理这种类型不一致的机制。我正在寻找一种方法,可以将该属性作为某种通用对象接收,任何可以使用 GSon 稍后解析它或使其工作的其他替代方法。

【问题讨论】:

  • 您总是可以将解析类型设为com.google.gson.JsonObject。然后你可以检查自己是否 prop2 是 StringJsonArray
  • 但是如何检查该属性是否嵌套在其他属性中?我可以找到任何链接吗?我只知道如何通过传递一个类来将 json 转换为 Gson 来检查值,但在这种情况下我不能传递一个类

标签: android gson retrofit


【解决方案1】:

你可以试试这个来检查 prop2 是一个数组还是一个空字符串

JsonObject jsonObject = new Gson().fromJson("{ \"status\":\"success\", \"payload\": { \"prop1\": 1234, \"prop2\": \"\" } }", JsonObject.class);
JsonObject payload = jsonObject.getAsJsonObject("payload");
JsonElement jsonElement = payload.get("prop2");
if (jsonElement.isJsonArray()) {
    // value of prop2 is an array
} else if (jsonElement.isJsonPrimitive()) {
    JsonPrimitive jsonPrimitive = jsonElement.getAsJsonPrimitive();
    if (jsonPrimitive.isString() && "".equals(jsonPrimitive.getAsString())) {
        // value of prop2 is an empty String
    }
}

【讨论】:

    猜你喜欢
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    • 2021-11-29
    • 2015-12-27
    • 2016-06-24
    • 1970-01-01
    相关资源
    最近更新 更多