GSON似乎无法解析JSON字符串

xdnvmnnf  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(172)

尝试使用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。该源代码来自com.google.gson.internal.bind包中ReflectiveTypeAdapterFactory.java的方法public T read(JsonReader in) throws IOException

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) {


你知道是什么引起的吗?或者我漏掉了什么?
先谢了

o0lyfsai

o0lyfsai1#

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

JsonObject jsonObject = gson.fromJson(json, JsonObject.class);

字符串

相关问题