【发布时间】:2017-03-01 13:46:33
【问题描述】:
我正面临以下情况。我目前正在对 JSON 文件编写一个验证机制,以验证是否满足几个约束。 对于这项任务,我想知道哪个可能是最好的工具,我很乐意提供任何合适的建议。
现在你们中的一些人可能想在这里提到,JSON 模式验证器的使用可能是我正在寻找的东西,但我个人认为它与我的用例不匹配。
让我举个例子:
{
"document" : {
"Type" : "A",
"Action" : [ "ActionA",
"ActionB",
"ActionC"
]
}
}
对于上面的简化文档,我想定义验证规则,如果不满足它们会产生错误或提示。
规则可以(以抽象的方式)描述如下:
- 如果文档在 Actions 中具有“A”和“ActionB”类型,则抛出错误
- 如果文档的类型为“B”,则抛出错误
- 如果文档没有类型则抛出错误
- 如果文档的类型为“C”且“ActionC”不在 Actions 中,则抛出错误
这种规则集的“黑名单”方法对我来说是首选解决方案,但基于“白名单”的方法也可以很好地适应这种情况。我在此处描述的示例规则也可能更复杂,并且跨越 JSON 层次结构中的多个级别。
据我所知,JSON 模式验证无法完成所描述的任务,因为它仅验证 JSON 文件上的语法是否正确。但我很乐意承认我的失败,以防我错了。
我已经围绕基于 python 的解析机制构建了一个体系结构,最初还想用 python 实现所描述的验证。但在第二次看时,我觉得可能有更好的工具来完成这项任务。 我想到了像 Yacc (与 lex 一起使用)这样的工具,因为整个情况倾向于在 JSON 文件上定义一个语法,它执行我想要实现的规则集.但不幸的是,我对这些工具不是很熟悉,因此无法评估它是否是正确的选择。
所以,重复我的问题。我想知道,哪种工具或编程语言能以“干净”的方式很好地解决我的问题?(我所说的“干净”一词只是指该工具基本上应该用于所需的目的,并且不需要一堆变通方法来完成它。因为否则任何工具都适合这个目的)
【问题讨论】:
-
你个人觉得最适合编码的编程语言,只要它有一个好的 JSON 库(你应该使用它来进行句法解析)。编写自己的 json 解析器来编写语义一致性规则会浪费时间(而且容易出错)。
标签: json validation parsing grammar rules