# Gson - `JsonParser`

> 原文： [https://howtodoinjava.com/gson/gson-jsonparser/](https://howtodoinjava.com/gson/gson-jsonparser/)

Gson [`JsonParser`](https://static.javadoc.io/com.google.code.gson/gson/2.8.5/com/google/gson/JsonParser.html)用于将 Json 数据解析为`JsonElement`并因此解析为`JsonObject`的解析树。 `JsonObject`可用于使用 JSON 字符串中的相应键来访问值。

## 1.创建`JsonParser`

`JsonParser`类只有一个默认的构造器，不需要任何参数或配置。

```java
JsonParser parser = new JsonParser();
```

## 2.解析 JSON

`JsonParser`类提供 3 种方法来提供 JSON 作为源并将其解析为`JsonElement`的树。

*   **`JsonElement parse(JsonReader json)`** – 使用[`JsonReader`](https://howtodoinjava.com/gson/jsonreader-streaming-json-parser/)将 JSON 作为令牌流读取，并从 JSON 流中返回下一个值作为分析树。
*   **`JsonElement parse(java.io.Reader json)`** – 使用指定的读取器读取 JSON，并将 JSON 字符串解析为解析树。
*   **`JsonElement parse(java.lang.String json)`** - 将指定的 JSON 字符串解析为解析树。

如果指定的文本不是有效的 JSON，则这三种方法都将抛出`JsonParseException`和`JsonSyntaxException`。

## 3\. `JsonElement`，`JsonObject`和`JsonArray`

在`JsonElement`树中解析了 JSON 字符串后，我们就可以使用它的各种方法来访问 JSON 数据元素。

例如，使用一种类型检查方法找出它代表什么类型的 JSON 元素：

```java
jsonElement.isJsonObject();
jsonElement.isJsonArray();
jsonElement.isJsonNull();
jsonElement.isJsonPrimitive();
```

我们可以使用相应的方法将`JsonElement`转换为 `JsonObject`和`JsonArray`：

```java
JsonObject jsonObject = jsonElement.getAsJsonObject();
JsonArray jsonArray = jsonElement.getAsJsonArray();
```

一旦有了`JsonObject`或`JsonArray`实例，就可以使用其 `get()`方法从中提取字段。

## 4\. Gson `JsonParser`示例

使用`JsonParser`的 **Jave 程序将 JSON 解析为 `JsonElement`（和`JsonObject`），并使用键获取 JSON 值。

```java
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

public class Main 
{
	public static void main(String[] args) throws Exception 
	{
		String json = "{'id': 1001, " 
				+ "'firstName': 'Lokesh'," 
				+ "'lastName': 'Gupta',"
				+ "'email': 'howtodoinjava@gmail.com'}";

		JsonElement jsonElement = new JsonParser().parse(json);

		JsonObject jsonObject = jsonElement.getAsJsonObject();

		System.out.println( jsonObject.get("id") );
		System.out.println( jsonObject.get("firstName") );
		System.out.println( jsonObject.get("lastName") );
		System.out.println( jsonObject.get("email") );
	}
}

```

程序输出。

```java
1001
"Lokesh"
"Gupta"
"howtodoinjava@gmail.com"

```

## 5.使用`fromJson()`获得`JsonObject`

我们可以使用`Gson`实例和来自`Json()`方法的**实例**来达到相同的结果。

```java
String json = "{'id': 1001, " 
		+ "'firstName': 'Lokesh'," 
		+ "'lastName': 'Gupta',"
		+ "'email': 'howtodoinjava@gmail.com'}";

JsonObject jsonObject = new Gson().fromJson(json, JsonObject.class);

System.out.println(jsonObject.get("id"));
System.out.println(jsonObject.get("firstName"));
System.out.println(jsonObject.get("lastName"));
System.out.println(jsonObject.get("email"));

```

程序输出：

```java
1001
"Lokesh"
"Gupta"
"howtodoinjava@gmail.com"

```

将有关使用`Jsonparser`从 Java 的 json 字符串中获取值的问题交给我。

学习愉快！