从 json 对象字符串转换为 Java 对象 om.google.gson.JsonSyntaxException

Convert from json Object String to Java Object om.google.gson.JsonSyntaxException

我有一个关于将字符串解析为 java 对象的问题。 我有这样的回应:

{
    "status": "success",
    "paginated": false,
    "data": [{
        "user": {
            "id": 21,
            "email": "kjhk@gmail.com",
            "access_token": "ai_wy-tTLLEyRCPAF86dWPJdQ77gefsTPwBkvtlEkNs",
            "test": []
        }
    }],
    "message": ""
}

我想获取状态

我创建了这个 class 并且只设置了状态,因为这是我唯一想要的字段,所有其他响应都不重要

package responseObjects;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;

import java.util.ArrayList;
import java.util.List;

public class LogInResponse {



    @JsonIgnoreProperties(ignoreUnknown = true)
    @JsonProperty("status")
    public String status;


    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

}

在程序中我发送请求并得到响应,但是当我尝试将其设置为 java 对象时它失败了 在这一行LogInResponse res = gson.fromJson(response.body().toString(),LogInResponse.class);

public class TestMain {
    OkHttpClient client = new OkHttpClient();
    JsonObject bodyJson = new JsonObject();
    JsonObject responseJson = new JsonObject();

    MediaType JSON = MediaType.parse("application/json; charset=utf-8");

  public String httpPost(String url, String json) throws IOException {
        RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), json);
        Request request = new Request.Builder()
                .url(url)
                .post(body)
                .build();
        Response response = client.newCall(request).execute();
        String  strResponse = response.body().string();
      JsonObject jsonObjectResponse = new JsonParser().parse(strResponse).getAsJsonObject();
    Gson gson = new Gson();
    LogInResponse res = gson.fromJson(response.body().toString(),LogInResponse.class);
        return response.body().string();
    }

这是个例外

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $

    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:226)
    at com.google.gson.Gson.fromJson(Gson.java:927)
    at com.google.gson.Gson.fromJson(Gson.java:892)
    at com.google.gson.Gson.fromJson(Gson.java:841)
    at com.google.gson.Gson.fromJson(Gson.java:813)

有人可以告诉我哪里出了问题吗?如何从响应中获取状态? 问候

在您的代码中,您使用 response.body().string() 来获取 JSON 字符串,但在失败的行中您编写了 response.body().toString(),这是一种不同的方法。

来自 OkHttp 关于 body()

的文档

Returns a non-null value if this response was passed to Callback.onResponse or returned from Call.execute. Response bodies must be closed and may be consumed only once.

也就是说,您使用它两次 三次(包括您的return 语句)。您已经在 strResponse 中找到了它。继续使用那个。 close() 它,当你在它的时候。