java - 带有 GSON 的 JSON 数组引发错误 "Expected BEGIN_OBJECT but was STRING"

标签 java json gson

我正在尝试将 JSON 数组转换为 Java 对象,但在理解如何使用 GSON 时遇到问题。

JSON 数组如下所示:

"[
  {
    "category": "1",
    "checks": [
      {
        "check": "1.1",
        "penaltypoints": "1.1",
        "keypoint": "1.1"
      },
      {
        "check": "1.2",
        "penaltypoints": "1.2",
        "keypoint": "1.2"
      }
    ]
  },
  {
    "category": "2",
    "checks": [
      {
        "check": "2.1",
        "penaltypoints": "2.1",
        "keypoint": "2.1"
      },
      {
        "check": "2.2",
        "penaltypoints": "2.2",
        "keypoint": "2.2"
      }
    ]
  }
]"

我对应的Java类是:

class Category {
    public String description;
    public List<Check> checks;
}

class Check {
    public String description;
    public float penaltyPoints;
    public KeyPoint keypoint;
}

class KeyPoint {
    public String description;
}

这就是我调用 GSON 的方式:

Gson gson = new Gson();         
Category categoriesArray[] = gson.fromJson(jsonString, Category[].class);

目前它抛出以下错误:

Expected BEGIN_OBJECT but was STRING at line 1 column 125

我是 GSON 新手,在理解它的工作原理时遇到问题。谁能帮助我理解我做错了什么?

最佳答案

你在期待这个

    "keypoint": "2.1"

要映射到

public KeyPoint keypoint;
...
class KeyPoint {
    public String description;
}

在 Java-JSON 转换中,POJO 旨在映射到 JSON 对象,反之亦然。在这里,您尝试将 JSON String 映射到 POJO。默认情况下这是行不通的。

使用 Gson 编写并注册您自己的 TypeAdapter 来执行此转换,或者将您的 JSON 更改为

"keypoint" : {
     "description" : "2.1"
}

关于java - 带有 GSON 的 JSON 数组引发错误 "Expected BEGIN_OBJECT but was STRING",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24167620/

相关文章:

java - 无法删除重复的列标题和页脚

java - 字符串换行导致错误

java - 如何在Java中使用GSON转换JSON对象?

java - Spring-boot:JUnit 测试 ApplicationContext 加载失败

c# - json 反序列化导致 dotnet 核心应用程序中止 - 没有抛出异常

c# - 使用 json.net 在 C# 中解析 json 需要 json.net .dll?

javascript - 在 Javascript 中从 PHP 操作 JSON

java - 使用 Retrofit 将 json 结构转换为数组

java - Gson 到 HashMap

Java正则表达式需要帮助来分割字符串!如何忽略空行?