当前位置: 首页 > 面试题库 >

使用GSON将JSON解析为POJO

万阳嘉
2023-03-14
问题内容

我的JSON样子如下:

"message_defaults": {
      "LabResultsRequestDefaultMessage": {
        "MsgTypeId": 8,
        "StaffId": 122,
        "StaffName": "Willis,Sam",
        "FirstName": "Sam",
        "MI": "D",
        "LastName": "Willis",
        "DefaultMessage": "Lab Department"
      },
      "ReferralRequestDefaultMessage": {
        "MsgTypeId": 6,
        "StaffId": 122,
        "StaffName": "Willis,Sam",
        "FirstName": "Sam",
        "MI": "D",
        "LastName": "Willis",
        "DefaultMessage": "Physican"
      },
      "MessageComposeDefaultMessage": {
        "MsgTypeId": 1,
        "StaffId": 122,
        "StaffName": "Willis,Sam",
        "FirstName": "Sam",
        "MI": "D",
        "LastName": "Willis",
        "DefaultMessage": "Office Manager/Willis Sam"
      }
}

现在,每个元素message_defaluts具有相同的结构(假设一个POJO称为MessageDefault.java)。那么我怎么能把所有东西都message defaults当作一个List<MessageDefault>??呢?

我正在使用gson进行解析。我也不能更改JSON响应。

编辑::

MessageDefault.java

public class MessageDefault{
    private String defaultMessage;
    private String firstName;
    private String lastName;
    private String mI;
    private int msgTypeId;
    private int staffId;
    private String staffName;

    public String getDefaultMessage(){
        return this.defaultMessage;
    }
    public void setDefaultMessage(String defaultMessage){
        this.defaultMessage = defaultMessage;
    }
    public String getFirstName(){
        return this.firstName;
    }
    public void setFirstName(String firstName){
        this.firstName = firstName;
    }
    public String getLastName(){
        return this.lastName;
    }
    public void setLastName(String lastName){
        this.lastName = lastName;
    }
    public String getMI(){
        return this.mI;
    }
    public void setMI(String mI){
        this.mI = mI;
    }
    public int getMsgTypeId(){
        return this.msgTypeId;
    }
    public void setMsgTypeId(int msgTypeId){
        this.msgTypeId = msgTypeId;
    }
    public int getStaffId(){
        return this.staffId;
    }
    public void setStaffId(int staffId){
        this.staffId = staffId;
    }
    public String getStaffName(){
        return this.staffName;
    }
    public void setStaffName(String staffName){
        this.staffName = staffName;
    }
}

它只是一切的结构message_defualts。但是在JSON中,的每个子项message_defualts都有不同的名称,例如LabResultsRequestDefaultMessage, ReferralRequestDefaultMessage etcPOJO
MessageDefault.java中所反映的名称。但是从JSON我想要它们的列表。

谢谢。


问题答案:

您可以执行以下操作而无需更改json结构。

Type mapType = new TypeToken<Map<String, MessageDefault>>() {}.getType();
Map<String, MessageDefault> messagesMap = gson.fromJson(json, mapType);
List<MessageDefault> messages = new ArrayList<MessageDefault>(messagesMap.values());


 类似资料:
  • 问题内容: 我有一个名为包含以下内容: 我知道我可以用以下方法获得阵列: 现在我想将其解析为… 最简单的方法是什么? 问题答案: 绝对最简单的方法是使用Gson的默认解析功能。 此功能的实现适用于需要反序列化为任何(例如any )的情况。 在您的情况下,您只需要获取的,然后将JSON数组解析为that ,如下所示: 在您的情况下是a ,但也可能是a ,any 或a 。 您可能需要看一下Gson A

  • 我正在尝试将JSON转换为GSON,我不确定这是最好的结构。 所有响应都由代码、消息和数据结构组成。但数据的内部结构可能会有所不同。 这是我的回应对象

  • 我正在使用凌空OkHttp从服务器获取一些数据。 响应是一个包含JSON的字符串,我想使用GSON/POJO解析它。 我得到错误: 预期BEGIN_OBJECT,但在第1行第1列路径$上是STRING 尝试解析时。 原因:java.lang.IllegalStateException:预期BEGIN_OBJECT但在第1行第1列路径$ com.google.gson.stream.JsonRead

  • 我有一个,名为,内容如下: 做这件事最简单的方法是什么?

  • 我的如下所示: 现在,中的每个元素都有相同的结构(比如一个名为MessageDefault.java的POJO)。那么,如何将所有

  • 有没有什么方法可以创建一个Gson的自定义转换器来提取Todo字段,所以registfit返回appipiate POJO? 对不起。我的英语不好...