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");
    }
}

