GSON-JsonParser

时间:2020-01-09 10:36:11  来源:igfitidea点击:

GSONJsonParser类可以解析JSON字符串或者将其流化为Java对象的树形结构。 GSON还有另外两个解析器。可以将JSON解析为Java对象的Gson JSON解析器,以及可以解析JSON字符串或者流为令牌的JsonReader(拉式解析器)。本教程重点介绍通过GSON的树解析器进行的" JsonParser"。

创建一个JsonParser

必须先创建JsonParser实例,然后才能使用GSONJsonParser。这是一个创建JsonParser实例的例子:

JsonParser jsonParser = new JsonParser();

将JSON解析为树结构

创建JsonParser之后,我们可以使用它将JSON解析为树形结构。这是一个使用JsonParser将JSON字符串解析为GSON对象的树结构的示例:

JsonParser parser = new JsonParser();

String json = "{ \"f1\":\"Hello\",\"f2\":{\"f3:\":\"World\"}}";

JsonElement jsonTree = parser.parse(json);

JSON的解析在代码的第三行中进行,方法是在JsonParser上调用parse(),并将对JSON字符串(或者流)的引用作为参数传递给解析。

迭代JSON树结构

解析的JSON树结构由GSON API中的对象组成。 JSON树结构的根是JsonElement对象。我们可以使用一种类型检查方法找出代表什么类型的JSON元素:

jsonTree.isJsonObject();
jsonTree.isJsonArray();
jsonTree.isJsonNull();
jsonTree.isJsonPrimitive();

上面解析的JSON字符串是一个JSON对象。因此,我们期望JsonElement代表一个JSON对象。如果是这样,我们将对其进行处理。看起来是这样的:

if(jsonTree.isJsonObject()) {
    JsonObject jsonObject = jsonTree.getAsJsonObject();
}

一旦有了JsonObject实例,就可以使用其get()方法从中提取字段。这是一个例子:

JsonObject jsonObject = jsonTree.getAsJsonObject();

JsonElement f1 = jsonObject.get("f1");

JsonElement f2 = jsonObject.get("f1");

我们也可以检查每个字段的类型,就像从JsonParser``parse()方法获得的第一个JsonElement一样。这是显示如何的示例:

if(f2.isJsonObject()){
    JsonObject f2Obj = f2.getAsJsonObject();

    JsonElement f3 = f2Obj.get("f3");
}

这是一个完整的示例,显示了如何迭代从JsonReader获得的JsonElement:

JsonParser parser = new JsonParser();

String json = "{ \"f1\":\"Hello\",\"f2\":{\"f3:\":\"World\"}}";

JsonElement jsonTree = parser.parse(json);

if(jsonTree.isJsonObject()){
    JsonObject jsonObject = jsonTree.getAsJsonObject();

    JsonElement f1 = jsonObject.get("f1");

    JsonElement f2 = jsonObject.get("f2");

    if(f2.isJsonObject()){
        JsonObject f2Obj = f2.getAsJsonObject();

        JsonElement f3 = f2Obj.get("f3");
    }

}