预期JsonObject但是是JsonPrimitive

时间:2017-07-07 07:25:48

标签: android json retrofit

你好,我在解析json响应时遇到异常 我的响应是动态意味着当我获得成功响应键成功但是当我得到失败响应它转向错误我如何解析该响应 我正在使用改装来解析json

当我得到失败的反应时,我得到了正确的结果,但是当我得到成功的反应时,它会失败,并且给我一个例外“被视为JsonObject但是JsonPrimitive

给我解决方案 感谢

3 个答案:

答案 0 :(得分:3)

嗨,我有一个类似的问题,服务器有时返回一个JsonObject,有时返回一个JsonPrimitive。返回JsonPrimitive时,我得到了200 OK,但由于类型不同(它期望使用JsonObject但找到了JsonPrimitive ),它仍然以onFailure结尾。

public final class JsonPrimitive extends JsonElement

public final class JsonObject extends JsonElement

com.google.gson文档指出,展位JsonPrimitive和JsonObject扩展了JsonElement,所以为什么不这样做:

JsonObject jsonObject = createJsonObject();
Call<JsonElement> requestCall = SomeInterface.sendRequest(jsonObject);
requestCall.enqueue(new Callback<JsonElement>() {
    @Override
    public void onResponse(Call<JsonElement> call, Response<JsonElement> response) {
        //Now when you get a JsonPrimitive it will still end up here because 
        //JsonPrimitive extends JsonElement
    }

    @Override
    public void onFailure(Call<JsonElement> call, Throwable t) {

    }
}

答案 1 :(得分:1)

Jsonobject和jsonprimitive是彼此不同的类型。

  

JsonObject {“name”:“John”,“age”:30,“car”:null}

     

JsonPrimitive(string,number,boolean)

您的回复模型错误。试试这个。

http://www.jsonschema2pojo.org/

答案 2 :(得分:0)

您的API响应是String,您尝试获取JsonObject。 在Postman中检查您的API,并确保API响应为JsonObject。