2015-04-02 113 views
1

我有一个JSON字符串,我将它作为字符串存储在数据库中。在前端,我将这个JSON渲染为对象。检查JSON是否在使用Jackson的JAVA中有效

我使用:

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

字符串:

{ 
"id": "295cd59f-4033-438c-9bf4-c571829f134e", 
"from": "Shrisha S.<[email protected]>", 
"to": [ 
    "Katie Porter <[email protected]>" 
], 
"cc": [ 
    "Jack d<[email protected]>,  Keerthi<[email protected]>" 
], 
"bcc": [ 

] 
} 

有没有什么方法可以检查如果JSON是有效还是无效的JAVA?

这里要注意的一件事是,我没有为JSON定义的模式,我可以映射到它,即JSON可以容纳任何东西。

我目前正在尝试与JACKSON,但因为我需要一个预先定义的模式,我没有。无论如何,这可以解决吗?

+4

通过捕捉异常,可能。查看http://stackoverflow.com/questions/10226897/how-to-validate-json-with-jackson-json – 2015-04-02 13:37:56

+0

JavaScript确实与这个问题无关,标签被移除。 – Cerbrus 2015-04-02 13:39:18

+0

可能重复的[试图验证json-using-jackson-through-spring-boot-rest](http://stackoverflow.com/questions/29340290/trying-to-validate-json-using-jackson-通过弹簧引导休息) – 2015-04-02 13:57:54

回答

4

可以读取它作为一个JsonNode,没有必要把它映射到一个特定的类,它的通用:

try{ 

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

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

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

但是对于第二部分来说,JSON模式通常不是一个好方法,因为它专注于JSON方面,而不是实际数据的更有意义的部分,可能的子类型等等,这一点在Java级别是重要的,数据处理发生。

所以通常你会定义一个POJO(或者理想地只使用一个用于实际数据处理的),绑定到它(与ObjectMapper.readValue()),然后检查数据是否不仅在技术上对低级数据类型有效,而且还符合其他商业限制。对于后者,您可以编写Java代码,也可以使用基于注释的框架,如Bean Validation API(JSR-303);例如参见:

http://beanvalidation.org/

再加上有很多#豆验证标签的问题,在这里也涉及到使用。一些框架为其增加了明确的支持;例如最好的Java服务框架,DropWizard可以做到这一点。其他人如Spring Boot也有支持。