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

时间:2015-04-02 13:36:35

标签: java json jackson

我有一个JSON字符串,我将其作为字符串存储在DB中。在前端,我将此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定义的架构,我可以映射到它,即JSON可以容纳任何东西。

我目前正在尝试JACKSON,但为此,我需要一个我没有的预定义架构。无论如何这可以修复吗?

3 个答案:

答案 0 :(得分:4)

您可以将其作为JsonNode读取,无需将其映射到特定的类,它的通用:

try{

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

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

答案 1 :(得分:2)

JSON规范禁止使用换行符,请确保替换换行符 Regex replace all newline characters with comma

确保在将其存储到数据库之前执行此操作。

答案 2 :(得分:2)

问题有两个不同的部分。首先是它是否是有效的JSON,其次是它是否包含特定的信息集。 @pdem已经回答了第一部分(您也可以将JSON读作java.lang.Object以获得相同的效果)。

但是对于第二部分,JSON Schema通常不是一个好方法,因为它侧重于JSON方面但不关注实际数据中更有意义的部分,可能的子类型等等,这在Java级别所有实际数据都很重要处理发生。

所以通常你会定义一个POJO(或者理想情况下只使用一个用于实际数据处理的POJO),绑定到它(用ObjectMapper.readValue()),然后检查数据是否在技术上是有效的低级别数据类型,但它也符合其他业务约束。

对于后一部分,您可以编写Java代码,也可以使用基于注释的框架,例如Bean Validation API(JSR-303);例如:

http://beanvalidation.org/

此外还有许多#bean-validation标记的问题以及与使用情况相关的问题。一些框架为其添加了明确的支持;例如最好的Java服务框架,DropWizard就是这样做的。其他像Spring Boot也有支持。