我有一个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
,但是我需要一个预定义的模式,而我没有。有什么办法可以解决这个问题吗?
4条答案
按热度按时间ruyhziif1#
你可以把它当作一个JsonNode来读,不需要把它Map到一个具体的Class,它的泛型:
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 也有支持。
kmynzznz3#
JSON规范禁止它使用换行符,请确保您正在替换换行符,请参见Regex replace all newline characters with comma
请确保在将其存储到DB中之前执行此操作。
11dmarpk4#