gpt4 book ai didi

java - android/java - 解析不同结构的 JSON 响应

转载 作者:行者123 更新时间:2023-12-02 12:09:39 24 4
gpt4 key购买 nike

我有 REST Web 服务,它有不同的响应,其中包含一些像这样的用户信息

{"id": 1,"fullname": "NV","login": "bravenewuser","sex": "M","mail":"aaa@gmail.com","photo": "","status": "","birthDate": "1900-01-11T00:00:00Z","registrationDate": "1900-05-13T00:00:00Z","phoneNumber": "9010"}

像这样

[{"id":2,"userId":0,"timeStart":"2017-08-21T13:05:00Z","active":true,"title":"Woman","artist":"Wolfmother","length":"00:04:00"},{"id":1,"userId":0,"timeStart":"2017-08-20T13:05:34Z","active":true,"title":"Dont call","artist":"Royal blood","length":"00:03:20"}]

包含用户收听列表

假设我有两个类UserListening(可能另外我还需要ListOfListenings包装类)。将来可能我想从服务中检索更多信息并获得具有其他结构的响应。

问题是在代码的一个地方(方法或类)解析不同响应的最佳方法是什么?

我使用com.loopj.android.http.AsyncHttpClient来调用服务。那么我可以尝试这样的事情吗:

  1. 为不同类型的响应编写一个通用响应处理程序:

    public class CommonResponseHandler <T extends Entity> extends AsyncHttpResponseHandler {
    private T response;

    public T getResponse() {
    return this.response; //return pasing result
    }

    @Override
    public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
    /*parsing response body into this.response*/
    }

    @Override
    public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
    ///...
    }
    }
  2. 然后像这样调用服务

    public User getUser(String url, RequestParams someparams) {
    AsyncHttpClient client = new AsyncHttpClient();
    CommonResponseHandler<User> handler = new CommonResponseHandler<>();
    client.get(url, someparams, handler );
    return handler.getResponse();
    }

我可以通过这种方式简化解析不同类型的响应吗?如果没有,解决这个问题更好(甚至最好)的方法是什么?谢谢。

最佳答案

您需要两个响应处理程序。

public class ObjectResponseHandler <T extends Entity> extends AsyncHttpResponseHandler {
private T response;

public T getResponse() {
return this.response; //return pasing result
}
}

并且,

public class ArrayResponseHandler <T extends Entity> extends AsyncHttpResponseHandler {
private List<T> responses;

public List<T> getResponses() {
return this.responses; //return pasing result
}
}

并且,如果您的 JSON 只是 JsonArray 或 JsonObject。您可以使用检查它

 anyJsonString.startsWith("[") => true => use ArrayResponseHandler
anyJsonString.startsWith("{") => true => use ObjectResponseHandler

如果你想继续使用 getResponse() 作为对象,你应该创建类似的东西

public class ListWrapper<T> {

List<T> list;

public ListWrapper (List<T> list) { this.list = list; }

public List<T> getList () { return list; }

}

并且,在 ArrayResponseHandler 中使用它,例如

 public ListWrapper getResponse() {
return new ListWrapper<T>(responses);
}

关于java - android/java - 解析不同结构的 JSON 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46631839/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com