簡體   English   中英

GSON 解析一個 JSON 的值

[英]GSON parse a JSON value

我正在處理以 Java 編寫的 web 服務,我必須從 JSON 格式獲得響應。 以下是 JSON。如何正確獲取這些值以便使用它們?

{
  "message": "string",
  "validationErrors": [
    {
      "code": "string",
      "message": "string"
    }
  ],
  "exceptionMessages": [
    {
      "code": "string",
      "message": "string"
    }
  ],
  "trailId": "string",
  "isSuccessful": true
}

這就是我正在嘗試的,但我遇到了錯誤。

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;

Type listErrors = new TypeToken<List<Response>>() {}.getType();
List<Response> list = gson.fromJson(response.toString(), listErrors);

這是我在測試時遇到的錯誤。

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

響應.java

import java.util.List;

public class Response{
    public Response() {
        super();
    }
    
    private String message;
    private List<ValidationErrors> errors;

    public void setMessage(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }

    public void setErrors(List<ValidationErrors> errors) {
        this.errors = errors;
    }

    public List<ValidationErrors> getErrors() {
        return errors;
    }
}

驗證錯誤.java

public class ValidationErrors {
    public ValidationErrors() {
        super();
    }
    
    private String code;
    private String message;


    public void setCode(String code) {
        this.code = code;
    }

    public String getCode() {
        return code;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }
}

正如我的理解是正確的,你只得到一個 object,而不是列表:

Response result = gson.fromJson(response.toString(), Response.class);

要 map object correctl,您還必須重命名屬性,以便它們適合 json 結構中的鍵名:

import java.util.List;

public class Response{
    public Response() {
        super();
    }
    
    private String message;
    private List<ValidationErrors> validationErrors;

    public void setMessage(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }

    public void setValidationErrors(List<ValidationErrors> errors) {
        this.validationErrors = errors;
    }

    public List<ValidationErrors> getValidationErrors() {
        return errors;
    }
}

或為其添加SerializedName注解:

import java.util.List;

public class Response{
    public Response() {
        super();
    }
    
    private String message;
    @SerializedName("validationErrors")
    private List<ValidationErrors> errors;

    public void setMessage(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }

    public void setErrors(List<ValidationErrors> errors) {
        this.errors = errors;
    }

    public List<ValidationErrors> getErrors() {
        return errors;
    }
}

並為缺少的鍵exceptionMessagestrailIdisSuccessful添加屬性。

您收到此錯誤,因為您的 json 響應是 object 並且您正在嘗試解析,因為它是一個數組,但它不是..

這就是為什么它顯示為com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $

你應該替換下面提到的代碼

Type listErrors = new TypeToken<List<Response>>() {}.getType();
List<Response> list = gson.fromJson(response.toString(), listErrors);

Response objectResponse = gson.fromJson(response.toString(), Response.class);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM