【问题标题】:Gson why does my deserialization not work?Gson 为什么我的反序列化不起作用?
【发布时间】:2020-11-12 23:38:10
【问题描述】:

我正在尝试制作一个需要使用 json 的 java 程序,我选择 gson 作为我的库来处理管理 JSON

但是当我尝试反序列化我的 json 时,messagereturn.text 值和 messagereturn.extra.text 值都设置为 null,我试图解决这个问题,但我无法解决。

我试图反序列化的 json 示例是

{
    "text":"",
    "extra":[{
        "text":"eee joined the game",
        "color":"yellow"
    }]
}

这就是我对 gson 的称呼

Message messagepacket = event.<ServerChatPacket>getPacket().getMessage();
//this gets the json data
messagereturn messagereturn =  gson.fromJson(String.valueOf(messagepacket), messagereturn.class);
System.out.println(messagereturn.returnmethod());

这也是我要反序列化的类

public class messagereturn {
    String text;
        
    public class extra{
        String text;
    }
    
    public String returnmethod() {
        extra extra = new extra();
        return text + extra.text;
    }
}

谢谢,如果需要更多信息,请告诉我,谢谢

【问题讨论】:

  • @J.F.我想通了谢谢!

标签: java json gson


【解决方案1】:

理解您的 JSON(以及顺便创建 Java 类)存在问题。这些标记[] 表示这是一个列表。

所以你有一个属性为text 的对象,输入Stringextra,输入List&lt;Object&gt;

此列表包含另一个对象(注意该对象由{} 定义,列表由[] 定义)。

列表中的对象还有另外两个属性:textcolor 都是原始类型; String.

所以你的java类应该是这样的:

public class Messagereturn {

    private String text;
    private List<Extra> extra;
    
    //getters and setters and other methods
    
}

还有班级Extra

public class Extra {

    private String text;
    private String color;
    
    //getters and setters
}

使用此数据模型,您可以使用这些结构调用您的 Gson

另外,你不需要调用returnMethod来创建Extra对象,它是由Gson创建的。

使用这行代码:

Messagereturn mr = new Gson().fromJson(txt, Messagereturn.class);

还有你的 JSON 示例,这是在调试模式下运行时存储的值:

如您所见,来自 JSON 的值已创建并加载到内存中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-11
    • 2012-08-26
    • 2016-01-17
    • 1970-01-01
    相关资源
    最近更新 更多