【问题标题】:GSON parse a JSON valueGSON 解析一个 JSON 值
【发布时间】:2023-01-26 16:56:33
【问题描述】:

我正在开发一个用 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;
    }
}

【问题讨论】:

  • 应为 BEGIN_ARRAY 但实际为 BEGIN_OBJECT

标签: json gson


【解决方案1】:

正如我的理解是正确的,你只得到一个对象,而不是一个列表:

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

【讨论】:

  • 谢谢@Jens,错误消失了。但是,如何从“validationErrors”和“exceptionMessages”中获取值?
【解决方案2】:

您收到此错误,因为您的 json 响应是对象,并且您正在尝试解析它,因为它是一个数组,但它不是……

这就是为什么它显示为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);

【讨论】:

  • 好的,错误不再存在。但是如何从“验证错误”和“异常消息”中获取值呢?
猜你喜欢
  • 2018-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-12
  • 2012-01-02
  • 2017-04-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多