首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >改造1.9 -相同的变量名,不同的JSON类型-转换异常

改造1.9 -相同的变量名,不同的JSON类型-转换异常
EN

Stack Overflow用户
提问于 2016-09-13 07:28:28
回答 1查看 267关注 0票数 1

我有一个名为buttons的JSON键--这个JSON键可以采用任何一种形式,一个JSON或一个JSON对象。但是,由于我使用的是Pojos,所以只能定义一种类型的buttons变量。Buttons buttons (用于JSON对象) List<Buttons> buttons (用于JSON )。但是,如果运行时类型的CONVERSION与我的变量类型不匹配,则会导致buttons异常。我应该如何处理这种情况?改造2能解决这个问题吗?

代码:

buttons是JSON数组类型时

代码语言:javascript
复制
buttons: [
{
title: "key1",
value: "value1"
},
{
title: "key2",
value: "value2"
},
{
title: "key3",
value: "value3"
}
],

buttons是JSON对象类型时

代码语言:javascript
复制
buttons: {
title: "key",
value: "value"
},
EN

回答 1

Stack Overflow用户

发布于 2016-09-13 08:15:10

在这种情况下,创建JsonDeserializer的更好解决方案

你可以使用这样的东西:

代码语言:javascript
复制
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,并继续进行解析按钮的默认逻辑。

您可以注册此反序列化器,如下所示:

代码语言:javascript
复制
new GsonBuilder().registerTypeAdapter(ButtonList.class, new TestDeser()).create();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39464417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档