簡體   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