【问题标题】:How to explain the irregular Json with Gson,Rxjava and Retrofit如何用 Gson、Rxjava 和 Retrofit 解释不规则的 Json
【发布时间】:2016-11-09 05:38:51
【问题描述】:

最近在我的项目中尝试使用Rxjava和Retrofit。但是我厌倦了服务器返回的不规则数据。例如,获取列表的接口可能会返回: [ {"title":"title1","desc":"desc1"}, {"title":"title2","desc":"desc2"}, {"title":"title3","desc":"desc3"} ] 它可能会返回: {"message":"error msg","status":"failed"} 所以如果我使用Observable<Response<List<Entity>>>解析结果,当它返回JsonObject时,它会失败。反之亦然。 我想知道如何处理这种情况。

另一个接口返回的奇怪数据是: { "status":"success", "message":"success msg", "data":"{\"userName\":\"name\",\"userId\":\"2016\"}" } 在这种情况下,我认为data应该是JsonObject,但它返回一个字符串,所以我不能使用 public class HttpResponse<T>{ private String status; private String message; private T data; } 解析结果。因为它无法将字符串data解析成Userentity

有没有办法解决这个问题?

【问题讨论】:

    标签: android gson retrofit rx-java


    【解决方案1】:

    您可以使用

    检查它的和对象还是数组
    if (json instanceof JSONArray) {}
    

    将字符串转换为 json 可以解决的字符串问题

    JsonObject jsonData = new JSONObject(data);
    

    但最后服务器应该返回给你一致的数据,如果你无法控制服务器,试试这个解决方法。

    【讨论】:

    • 因为我使用改造作为网络框架:Retrofit retrofit = new Retrofit.Builder() .baseUrl(baseUrl) .client(client) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create(gson)) .build();
    • 所以这些方法可能不适合我的情况。
    【解决方案2】:

    您可以使用OkHttp's application level interceptor 并通过尝试将其解析为{"message":"error msg","status":"failed"} 对象来分析响应数据,如果它成功并且status 确实是failed,那么您可以使用适当的消息抛出异常,如果可能的话类型正确,这将导致 Retrofit 通过 onError 通知返回抛出的异常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-05
      • 2016-01-11
      • 1970-01-01
      • 2023-04-01
      • 2020-08-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多