如何验证param实际上是Json,而不仅仅是一个字符串

How to verify param is actually Json, not just a string

我有一个 Json我接受作为端点参数的节点。看起来像这样:

@ApiModelProperty(value = "data", example = "{}", required = true)
@NotNull(message = "data cannot be null")
protected JsonNode data;

我想创建一个名为 @ValidJson 的验证器。 Json 节点本身将确保提供给它的信息是有效的 json,所以如果我传递类似:

{"data" = "hello",}"hello"后面多了一个逗号,会报错。但是我如何确保我没有为 JsonNode 得到类似 "Hello" 的东西,这是有效的 json 因为普通字符串是有效的 json 表示?

起初我想检查字符串是否只是字母数字,如果是,那么我会认为它无效,但显然有人可以传递一个带有符号的字符串,这样就可以了。我能想到的最佳解决方案是检查第一个和最后一个字符分别是 {},然后 JsonNode 会处理其余的。但是我对 JsonNode 了解不够,所以也许这里有人有更好的主意?

编辑:

为了更具体地说明我想要什么,这里有几个例子:

JsonNode 会处理不正确的 Json。我想对输入的数据做一些更严格的验证。我不想接收任何 Json 的 sort,我想要 "real",可序列化json 我们说 json 的意思。如果用户传递的字符串类似于:

"Hello" "Hello world" "I'm just a random String that isn't in a key:value structure"

等等,我想抛出一个错误并向他们询问 Json 格式为 key:value 的结构,例如:

{
   "key": "value"
}

我正在考虑检查第一个和最后一个字符串值是否分别为 {},正如我在评论中提到的,但我认为那太 "hacky"也许还有更好的方法。

Jackson 旨在将 JSON 转换为 Java 对象。尽管您的用例可以工作,但它很可能不是很有帮助。查看 https://www.baeldung.com/jackson 本教程可能会帮助您了解 Jackson 及其 JSON 转换。

如果你真的想使用 JsonNode,Jackson 会检查它是否合适 JSON,否则它会立即抛出异常,因为它无法将其解析为 JsonNode。

如果你想要一个 JSON 对象,你可以简单地使用 Map<String, Object> 而不是 JsonNode。这将处理键值部分。

正如@VinceEmigh 在评论中指出的那样,isObject 是我正在寻找的功能。