首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将JSON改造为POJO

将JSON改造为POJO
EN

Stack Overflow用户
提问于 2015-06-24 22:04:42
回答 2查看 1.6K关注 0票数 5

我是android的新手,我是usig retrofit

问题是我不能从request获取我的POJO

我的要求是:

代码语言:javascript
复制
@FormUrlEncoded
@POST("/index.php")
void login(@Field("io") String command,
           @Field("lu") String userName,
           @Field("lp") String password,
           @Field("lm") String imei,
           @Field("l") int language,
           RestCallback<ModelLoginResponse> callback);

服务器JSON响应为:

代码语言:javascript
复制
  {
    "tk": "thdoz4hwer32",
    "pn": "1",
    "lc": {
        "1": "Opel Combo",
        "3": "VW Crafter",
        "7": "Opel Vivaro"
    },
    "stg": {
        "rs": "30",
        "sml": "http://exemple.mob.ru",
        "ssl": "index.php"
    }
}

where 1,3,7 are different every time

和我的POJO类:

代码语言:javascript
复制
 @Parcel
    public class ModelLoginResponse {

    @SerializedName("pn")
    private String personalNumber;

    @SerializedName("tk")
    private String token;

    //    ?????? for "lc" and "stg" 

    public void ModelResponse(String personalNumber, String token){
        this.personalNumber = personalNumber;
        this.token = token;
    }

    public String getPersonalNumber() {
        return personalNumber;
    }

    public void setPersonalNumber(String personalNumber) {
        this.personalNumber = personalNumber;
    }

    public String getToken() {
        return token;
    }

    public void setToken(String token) {
        this.token = token;
        }
    }

我应该如何完成我的ModelLoginResponse POJO类以获得完整的服务器响应?

EN

回答 2

Stack Overflow用户

发布于 2016-08-26 20:43:39

我知道这是一个古老的问题,你可能已经弄明白了,但我只是在这里发布一个答案,以便其他人可能会发现它是有帮助的。

对于"lc“字段,每个响应的键值可能不同,您可以使用诸如HashMap之类的映射数据结构。

您可以对"stg“字段使用相同的Map结构,但如果您知道键总是相同的,那么为该项目创建另一个POJO类通常会更好。

简而言之,你的反应会是这样的:

代码语言:javascript
复制
@Parcel
public class ModelLoginResponse {
    @SerializedName("pn")
    private String personalNumber;

    @SerializedName("tk")
    private String token;

    @SerializedName("lc")
    private HashMap<String, String> lcMap;

    @SerializedName("stg")
    private StgResponse stgResponse;

    //add getters and setters if you need them.
}        

其中StgResponse将类似于:

代码语言:javascript
复制
public class StgResponse {
    @SerializedName("rs")
    private Integer rs;

    @SerializedName("sml")
    private String sml;

    @SerializedName("ssl")
    private String ssl;

    //Getters and setters
}

希望这能有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2015-06-24 22:34:50

尝试这样定义您的ModelLoginResponse类:

代码语言:javascript
复制
@Parcel
public class ModelLoginResponse {

@SerializedName("tk")
private String token;

@SerializedName("pn")
private String personalNumber;

@SerializedName("lc")
private String[3] lc;

@SerializedName("stg")
private String[3] stg; 

public ModelResponse(){}

public String getPersonalNumber() {
    return personalNumber;
}

public void setPersonalNumber(String personalNumber) {
    this.personalNumber = personalNumber;
}

public String getToken() {
    return token;
}

public void setToken(String token) {
    this.token = token;
}

public void setLc(String[] lc){
    this.lc = lc;
}

public void setStg(String[] stg){
    this.stc = stg;
}

public String getLc(){
    return lc;
}

public String getStg(){
    return stg;
}
}

如果要解析JSON字符串,则使用GSON库,只需要一个没有参数的默认构造函数,并且JSON字符串的每个“字段”都需要目标类中对应的属性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31028792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档