使用GSON将JSON解析为POJO

我的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每个elemet都具有相同的结构(比如说一个名为MessageDefault.java的POJO)。 那么如何将所有message defaults作为List

我正在使用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 etc都有不同的名称,如LabResultsRequestDefaultMessage, ReferralRequestDefaultMessage etc ,它们反映在POJO MessageDefault.java中。 但是从JSON我想要它们的列表。

谢谢。

您可以在不更改json结构的情况下执行以下操作。

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

如果你想首先从json获取List,你必须更正你的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" } }] 

编辑:尝试将其转换为列表

 Type collectionType = new TypeToken>(){}.getType(); Collection ints2 = gson.fromJson(json, collectionType); 

点击此链接