使用Jackson检查JSON在JAVA中是否有效

ivqmmu1c  于 2022-11-08  发布在  Java
关注(0)|答案(4)|浏览(169)

我有一个JSON字符串,我把它作为一个字符串存储在数据库中。在前端,我把这个JSON作为对象呈现。
我正在使用:

JSON.parse(string);  
Uncaught Syntax error: Unexpected Token

字符串:

{
"id": "295cd59f-4033-438c-9bf4-c571829f134e",
"from": "Shrisha S.<shrisha@s.com>",
"to": [
    "Katie Porter <katie.porter@ss.com>"
],
"cc": [
    "Jack d<jack.d@dd.com>,     Keerthi<keerthi.s@dd.com>"
],
"bcc": [

 ]  
}

有没有什么方法可以检查JSON在JAVA中是否有效?
这里需要注意的一点是,我没有为JSON定义一个可以Map到的模式,也就是说,JSON可以容纳任何内容。
我目前正在尝试使用JACKSON,但是我需要一个预定义的模式,而我没有。有什么办法可以解决这个问题吗?

ruyhziif

ruyhziif1#

你可以把它当作一个JsonNode来读,不需要把它Map到一个具体的Class,它的泛型:

try{

  ObjectMapper objectMapper = ...;
  JsonNode jsonNode = objectMapper.readTree(yourJsonString);

} catch(JsonProcessingException e){........}
dgenwo3n

dgenwo3n2#

这个问题有两个不同的部分。第一个是它是否是有效的JSON,第二个是它是否包含特定的信息集。@pdem已经回答了第一部分(您也可以将JSON读为java.lang.Object以获得相同的效果)。
但对于第二部分,JSON模式通常不是一个好方法,因为它关注JSON方面,而不是实际数据中更有意义的部分、可能的子类型等,这些在所有实际数据处理发生的Java级别很重要。
因此,通常您会定义一个POJO(或者理想情况下只使用一个用于实际数据处理的POJO),绑定到它(使用ObjectMapper.readValue()),然后检查数据是否不仅在技术上有效(相对于低级数据类型),而且符合其他业务约束。
对于后一部分,您可以编写Java代码,或者使用基于注解的框架,如Bean Validation API(JSR-303);参见例如:
http://beanvalidation.org/
此外,这里还有许多与用法相关的#bean-validation标记问题。例如,最好的Java服务框架,DropWizard就能做到这一点。其他的像 Boot 也有支持。

kmynzznz

kmynzznz3#

JSON规范禁止它使用换行符,请确保您正在替换换行符,请参见Regex replace all newline characters with comma
请确保在将其存储到DB中之前执行此操作。

11dmarpk

11dmarpk4#

public boolean isValidJson(final String json) {
    try {
        final ObjectMapper objectMapper = new ObjectMapper();
        final JsonNode jsonNode = objectMapper.readTree(json);
        return jsonNode instanceof ContainerNode;
    } catch (JsonProcessingException jpe) {
        return false;
    }
}

相关问题