改造:处理可以是空字符串或数组的属性
Posted
技术标签:
【中文标题】改造:处理可以是空字符串或数组的属性【英文标题】: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 是 String
或 JsonArray
但是如何检查该属性是否嵌套在其他属性中?我可以找到任何链接吗?我只知道如何通过传递一个类来将 json 转换为 Gson 来检查值,但在这种情况下我不能传递一个类
【参考方案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
【讨论】:
以上是关于改造:处理可以是空字符串或数组的属性的主要内容,如果未能解决你的问题,请参考以下文章
FCM的Firebase功能不起作用。提供给sendToDevice()的注册令牌必须是非空字符串或非空数组