使用GSON解析JSON到POJO [英] Parsing JSON to POJO using GSON
问题描述
我的 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:办公室经理/ Willis Sam
}
}
现在 message_defaluts
中的每个元素都具有相同的结构(说一个名为MessageDefault.java的POJO)。那么我怎样才能获得所有消息默认值
作为 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;
$ / code $ / pre
它只是所有 message_defualts
。但是在JSON中, message_defualts
的每个子元素都具有不同的名称,如 LabResultsRequestDefaultMessage,ReferralRequestDefaultMessage等
,这些名称反映在POJO MessageDefault的.java。但是从JSON我想要列出它们。
谢谢。
解决方案您可以在不更改您的json结构的情况下执行以下操作。
输入mapType = new TypeToken< Map< String,MessageDefault>> (){} .getType();
地图< String,MessageDefault> messagesMap = gson.fromJson(json,mapType);
列表< MessageDefault> messages = new ArrayList< MessageDefault>(messagesMap.values());
My JSON
looks like follow :
"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"
}
}
Now each elemet in message_defaluts
is having same structure (Say one POJO called MessageDefault.java). So how can I get all message defaults
as a List<MessageDefault>
??
I am using gson for parsing. Also I can't change JSON response.
EDIT ::
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;
}
}
Its is just structure of all message_defualts
. But In JSON, each child of message_defualts
is having different name like LabResultsRequestDefaultMessage, ReferralRequestDefaultMessage etc
which are being reflected in POJO MessageDefault.java. But from JSON I want List of them.
Thanks.
解决方案 You can do the following without changing your json structure.
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解析JSON到POJO的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!