我有一个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
,但为此,我需要一个我没有的预定义架构。无论如何这可以修复吗?
答案 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);例如:
此外还有许多#bean-validation标记的问题以及与使用情况相关的问题。一些框架为其添加了明确的支持;例如最好的Java服务框架,DropWizard就是这样做的。其他像Spring Boot也有支持。