我有下面的验证器,它使用Gson
检查JSON字符串是否有效。它可以很好地处理JSON对象,但当你传递给它一个JSON数组时,它会崩溃。
JSON字符串验证器
public class JsonStringValidator implements ConstraintValidator<JsonString, String> {
private static final TypeAdapter<JsonObject> strictGsonObjectAdapter =
new Gson().getAdapter(JsonObject.class);
@Override
public boolean isValid(String jsonString, ConstraintValidatorContext context) {
try {
try (JsonReader reader = new JsonReader(new StringReader(jsonString))) {
strictGsonObjectAdapter.read(reader);
reader.hasNext();
return true;
}
} catch (IOException e) {
return false;
}
}
}
工作
{
"books":[
{
"isbn": "12345"
}
]
}
失败
[
{
"isbn": "12345"
}
]
例外
com.google.gson.JsonSyntaxException: Expected a com.google.gson.JsonObject but was com.google.gson.JsonArray
因此,我似乎还需要一个strictGsonArrayAdapter
。
但是,在调用strictGsonObjectAdapter
之前,如何确定它是数组还是对象呢?
1条答案
按热度按时间w3nuxt5m1#
通过使用
JsonParser
给予JsonElement
,我能够确定JSON字符串是数组还是对象。JsonElement
类具有用于isJsonArray()
和isJsonObject()
的布尔方法。