【问题标题】:Check if JSON is valid in JAVA using Jackson使用 Jackson 检查 JSON 在 JAVA 中是否有效
【发布时间】:2015-06-07 11:47:54
【问题描述】:

我有一个 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 定义可以映射到的模式,即 JSON 可以保存任何内容。

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

【问题讨论】:

标签: java json jackson


【解决方案1】:

你可以把它看成一个JsonNode,不需要映射到特定的Class,它的泛型:

try{

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    http://beanvalidation.org/

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

    【讨论】:

      【解决方案3】:

      JSON 规范禁止它使用换行符,请确保您正在替换换行符,请参阅 Regex replace all newline characters with comma

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

      【讨论】:

        猜你喜欢
        • 2015-11-26
        • 1970-01-01
        • 2018-04-07
        • 2012-02-04
        • 2015-09-28
        • 2012-04-27
        • 2012-05-20
        • 2011-04-21
        • 1970-01-01
        相关资源
        最近更新 更多