如何用Gson,Rxjava和Retrofit解释不规则的Json

时间:2016-07-07 01:36:04

标签: android gson retrofit rx-java

最近,我尝试在我的项目中使用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,但它返回一个String,所以我不能使用 public class HttpResponse<T>{ private String status; private String message; private T data; } 解析结果。因为它无法将字符串data解析为User实体

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

2 个答案:

答案 0 :(得分:0)

您可以使用

检查其对象或数组
if (json instanceof JSONArray) {}

您可以修复的字符串问题将字符串转换为json

JsonObject jsonData = new JSONObject(data);

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

答案 1 :(得分:0)

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