繁体   English   中英

Android Jackson库解析

[英]Android Jackson Library parsing

获取服务器响应后,出现“无法将JSONObject强制转换为ClassResponse”错误。 我猜是因为服务器的响应与ClassResponse中的字段不匹配? 是否由于JSON响应中的“数据”结构? 我对每个领域都有一个二传手,但不确定我在做什么错。 有没有一种方法可以更改Jackson库的注释以解析json对象的其他层? 例如..

@JsonProperty(“ data:accessToken”)或类似性质的东西?或者甚至有必要吗?

服务器响应:

{
    success: "true"
    message: "Record Created"
    data: {
      userToken : "1"
          }
}

ClassResponse:

@JsonIgnoreProperties(ignoreUnknown = true)
public class LoginResponse extends Response<LoginResponse.Result>
{
    public static class Result
    {

        private String mUserToken;
        private String mAccessToken;
        private String mUserId;

        public String getUserToken(){
            return mUserToken;
        }

        @JsonProperty("userToken")
        public void setUserToken(final String aUserToken){
            mUserToken = aUserToken;
        }

        public String getAccessToken(){
            return mAccessToken;
        }

        @JsonProperty("accessToken")
        public void setAccessToken(final String aAccessToken){
            mAccessToken = aAccessToken;
        }

        public String getUserId(){
            return mUserId;
        }

        @JsonProperty("user_id")
        public void setUserId(final String aUserId){
            mUserId = aUserId;
        }
    }
}

    (edit)
    @JsonProperty("data")
    public void accessDataLayer(final String data) throws JSONException {

        JSONObject jobj = new JSONObject(data);

        mUserToken = jobj.getString("userToken");
        mAccessToken = jobj.getString("accessToken");
        mUserId = jobj.getString("user_id");

    }



@Override
public RESULT loadDataFromNetwork() throws Exception{
    final String url = buildUrl();

    HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
    String response;

    try{
        conn.setDoInput(true);
        conn.setDoOutput(true);

        MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);

        JSONObject submitInfo = new JSONObject();
        submitInfo = buildParams(entity);

        OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream());
        out.write(submitInfo.toString());
        out.close();

            response = readStream(conn.getErrorStream());

        conn.disconnect();
    }
    return parse(response);

因为您正在尝试在“ LoginResponse.class”集合中反序列化整个JSONObject。 没关系,因为LoginResponse是JSON响应中数组“数据”的元素,但不是整个响应! 为了得到数组,你应该写这样的东西

 JsonArray data = (JsonArray) JSONObject.getAsJsonArray("data")

然后,您将获得“数据”集合

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM