带有 GSON 的 JSON 数组抛出错误"Expected BEGIN_OBJECT but was STRING"



我正在尝试将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"
}

最新更新