使用Gson识别JsonObject与JsonArray

ehxuflar  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(273)

我有下面的验证器,它使用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之前,如何确定它是数组还是对象呢?

w3nuxt5m

w3nuxt5m1#

通过使用JsonParser给予JsonElement,我能够确定JSON字符串是数组还是对象。
JsonElement类具有用于isJsonArray()isJsonObject()的布尔方法。

JsonElement jsonElement = JsonParser.parseString(jsonString);
log.info(jsonElement.isJsonArray());
log.info(jsonElement.isJsonObject());

相关问题