我有一个名为tsCharacter <- c("2016-03-27 01:00:00", "2016-03-27 02:00:00", "2016-03-27 03:00:00")
as.POSIXct(tsCharacter)
"2016-03-27 CET" "2016-03-27 CET" "2016-03-27 CET"
的JSON密钥
此JSON密钥可以采用任何形式,JSON数组或JSON对象。
但是,由于我使用Pojos,我只能定义一种buttons
变量。
buttons
(对于JSON对象)或 Buttons buttons
(对于JSON数组)。
但是,如果List<Buttons> buttons
的运行时类型与我的变量类型不匹配,则会导致改进的CONVERSION
异常。
我应该采取什么方法处理这种情况? Can Retrofit 2可以解决这个问题吗?
代码:
当buttons
是JSON数组类型
buttons
当buttons: [
{
title: "key1",
value: "value1"
},
{
title: "key2",
value: "value2"
},
{
title: "key3",
value: "value3"
}
],
是JSON对象类型
buttons
答案 0 :(得分:1)
在这种情况下,更好的解决方案是创建JsonDeserializer
您可以使用以下内容:
public class TestDeser implements JsonDeserializer<ButtonList>{
@Override
public ButtonList deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
final ButtonList list = new ButtonList();
if (json.isJsonArray()) {
for (int i = 0; i < json.getAsJsonArray().size(); i++) {
final Button btn = context.deserialize(json.getAsJsonArray().get(i), Button.class);
list.buttons.add(btn);
}
} else {
final Button btn = context.deserialize(json.getAsJsonObject(), Button.class);
list.buttons.add(btn);
}
return list;
}}
在这个例子中,您可以看到如何检查输入json是JsonArray还是JsonObject,并继续使用解析Button的默认逻辑。
您可以按如下方式注册此解串器:
new GsonBuilder().registerTypeAdapter(ButtonList.class, new TestDeser()).create();