GSON 似乎无法解析 JSON 字符串

问题描述 投票:0回答:1

尝试使用 GSON 解析 JSON 字符串失败。我使用 JDK 8、GSON V2.10.1(使用 IntelliJ,还有 VS Code)并确定了错误的来源。相关代码片段如下:

JSON:

{
  "took" : 2,
  "hits" : {
    "total" : 19,
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "layouts-new",
        "_type" : "doc",
        "_id" : "a0b8707c-feb3-4867-966d-33c435c82141",
        "_score" : 1.0,
         . . .

我写的代码片段:

      Gson gson = new GsonBuilder().setLenient().create();
      JSONObject jsonObject = gson.fromJson(json, JSONObject.class);
      . . .

返回的jsonObject是{},为空。这意味着 JSON 中的任何元素都没有被解析。调试后发现有问题的行是

BoundField field = boundFields.get(name)
。它抛出了一个 NPE。该源代码来自包
public T read(JsonReader in) throws IOException
ReflectiveTypeAdapterFactory.java
的方法
com.google.gson.internal.bind

      try {
        in.beginObject();
        while (in.hasNext()) {
          String name = in.nextName();
          BoundField field = boundFields.get(name);
          if (field == null || !field.deserialized) {
            in.skipValue();
          } else {
            readField(accumulator, in, field);
          }
        }
      } catch (IllegalStateException e) {

知道罪魁祸首是什么或者我在哪里遗漏了什么吗?

提前致谢

json parsing java-8 gson
1个回答
0
投票

JSONObject
不是来自 Gson 库。因此,Gson 没有内置适配器,并尝试使用反射进行反序列化,使用该
JSONObject
类的内部字段。

使用对应的Gson类

com.google.gson.JsonObject
来代替:

JsonObject jsonObject = gson.fromJson(json, JsonObject.class);
© www.soinside.com 2019 - 2024. All rights reserved.