配置Maven依赖

首先,在 pom.xml 文件中配置 gson 依赖项:

1
2
3
4
5
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10</version>
</dependency>

gson 版本根据实际情况进行选择,建议使用最新版本(见 Maven Central )。

本文使用的是 2.10 版本(当前最新版本)。

非严格验证

Gson 库的 JsonParser 类提供了 parseString() 方法,用于将指定的 JSON 字符串解析成 JsonElements 对象。如果指定的字符串不是有效的 JSON 格式,则在解析的过程中会抛出 JsonSyntaxException 类型异常。

我们可以使用该方法来判断字符串是否为 JSON 格式,如果在解析过程中出现错误,说明指定的字符串不是有效的 JSON 格式:

1
2
3
4
5
6
7
8
public static boolean isValid(String json) {
try {
JsonParser.parseString(json);
} catch (JsonSyntaxException e) {
return false;
}
return true;
}

测试示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
public static void main(String[] args) {
String json = "{\"id\":20990981,\"name\":\"Johnson\",\"tag\":\"Javaer,Student\",\"platform\":\"AL\"}";
System.out.println(isValid(json));

json = "[{\"id\":20990981,\"name\":\"Johnson\",\"tag\":\"Javaer,Student\",\"platform\":\"AL\"}]";
System.out.println(isValid(json));
}

/*
此代码示例执行结果如下:
true
true
*/

需要注意的是,该方法的默认策略认为单独的字符串、数字值作为 JsonElement 节点的一部分是有效的。也就是说,它认为单个字符串或数字是有效的 JSON 格式。

以下代码示例,演示了该方法会把单独的字符串认为是一个有效的 JSON 格式字符串:

1
2
3
4
5
6
7
8
9
public static void main(String[] args) {
String json = "Johnson";
System.out.println(isValid(json));
}

/*
此代码示例执行结果如下:
true
*/

如果想把这种情况看作是无效的 JSON 字符串,我们可以使用以下的方法进行严格验证。

严格验证

为实现严格的验证策略,需要先创建了一个 TypeAdapter 对象,并将 JsonElement 类定义为一个必要的类型匹配。然后调用 TypeAdapter 对象的 fromJson() 方法,如果指定的字符串不是有效的 JSON 对象或数组,则会抛出 JsonSyntaxException 异常。

方法的代码如下:

1
2
3
4
5
6
7
8
9
public static boolean isValidStrictly(String json) {
TypeAdapter<JsonElement> strictAdapter = new Gson().getAdapter(JsonElement.class);
try {
strictAdapter.fromJson(json);
} catch (JsonSyntaxException | IOException e) {
return false;
}
return true;
}

调用该方法,校验一个单独的字符串是否有效的 JSON 格式。

1
2
3
4
5
6
7
8
9
public static void main(String[] args) {
String json = "Johnson";
System.out.println(isValidStrictly(json));
}

/*
此代码示例执行结果如下:
false
*/

P.S. 本文示例代码托管在 GitHub 上。

(END)