使用GSON解析JSON到POJO [英] Parsing JSON to POJO using GSON

查看:123
本文介绍了使用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:办公室经理/ 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆