改造:处理可以是空字符串或数组的属性

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 是 StringJsonArray 但是如何检查该属性是否嵌套在其他属性中?我可以找到任何链接吗?我只知道如何通过传递一个类来将 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
    

【讨论】:

以上是关于改造:处理可以是空字符串或数组的属性的主要内容,如果未能解决你的问题,请参考以下文章

空字符串或空变量的 JSON 标准是啥?

FCM的Firebase功能不起作用。提供给sendToDevice()的注册令牌必须是非空字符串或非空数组

检查变量是不是为空字符串或空字符串的更好方法?

javascript检查空字符串或空字符串[重复]

python pandas:过滤掉给定字段的空字符串或空字符串的记录

空字符串或空格的正则表达式