一尘不染

使用GSON将JSON解析为POJO

json

我的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我想要它们的列表。

谢谢。


阅读 294

收藏
2020-07-27

共1个答案

一尘不染

您可以执行以下操作而无需更改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());
2020-07-27