无法使用 GSON 解析/读取 JSON

我正在使用 GSON 库来解析一个简单的 JSON,它在所有对象(不限于 4 个)上具有类似的键值对,如下所示:


[

  {

    "A": "xyz",

    "B": "mno",

    "C": 368,

    "E": 1,

    "F": "pqr"

  },

  {

    "A": "qwe",

    "B": "def",

    "C": 338,

    "D": 7,

    "E": 1,

    "F": null

  },


  {...

  },


  {...

  }

]

一旦我读取/迭代 GSON 阅读器以解析值,我就会得到


Expected BEGIN_OBJECT but was STRING on line 7 of the following code

我尝试了阅读和迭代的各种组合,但我无法理解使用 while (reader.hasNext()) 背后的逻辑


reader.beginArray();

        while (reader.hasNext()) {

            reader.beginObject();    

            while (reader.hasNext()) {

                if (reader.nextName().equals("A")) {    

                    while (reader.hasNext()) {

                        reader.beginObject();

                        while (reader.hasNext()) {

                            readPostObject(reader, queue);

                        }

                        reader.endObject();   


                    }

                } else {

                    reader.skipValue();

                }   


            }

            reader.endObject();    

        }

        reader.endArray();

    }

如果有人能透露一些信息,那就太好了?


holdtom
浏览 220回答 3
3回答

元芳怎么了

假设你不明确需要使用Reader:基本上你的JSON包含一个Array或一个List的Map秒。如果您知道结果需要什么以及如何告诉Gson您要反序列化的内容,那么反序列化很容易。下面两个例子:@SuppressWarnings("unchecked")List<Map<?, ?>> mapList = new Gson().fromJson(JSON, List.class);以上将反序列化任何通用类型的地图并猜测值的类型。这会产生类似于ArrayList<Map<String, Object>值是Strings 或Doubles 的情况。要明确地告诉Maps 泛型类型,可以这样做:Type tMap = TypeToken.getParameterized(Map.class, String.class, String.class).getType();Type tjson = TypeToken.getArray(tMap).getType();Map<String, String>[] mapList = new Gson().fromJson(json, tjson);

森林海

如前所述,Gson 是将 JSON 解析为纯 Java 对象的绝佳工具。请参见下面的示例(用 Kotlin 编写):data class Abc(val A: String, val B: String, val C: Int, val E: Int, val F: String)fun parseAbcList(json: String): List<Abc> {&nbsp; &nbsp;return Gson().fromJson<List<Abc>>(json, object : TypeToken<List<Abc>>() {}.type)}

陪伴而非守候

以下是如何使用 Java 对象执行此操作的示例(就像我在评论中提到的那样):class MyJsonObject {&nbsp; public String A;&nbsp; public String B;&nbsp; public Integer C;&nbsp; public Integer D;&nbsp; public Integer E;&nbsp; public String F;}// SerializationGson gson = new Gson();List<MyJsonObject> myJsonObjects = gson.toJson(MyJsonObject[].class);System.out.println(myJsonObjects[0].A); // xyz这是使用 GSON 解析 JSON 的推荐方法。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java