2

一个自动化系统将为应用程序[Play with Scala] 提供 JSON,并且集成的合同是 JSON 不需要验证,因为它总是被认为是正确的。但是出于测试目的,当我们经常播种数据时,我们无法发送正确的 JSON。我们想根据一组语法来验证我们收到的 JSON。有没有一个图书馆已经这样做了。还是有更好的方法来做到这一点?

示例:有效 Json 的语法:

"header"->[String, mandatory], 
"footer"->[String], 
"someArray"->Array[String, mandatory], 
"someArrayObject"->Array[
                         {
                          {"key1"->Int, mandatory},
                          {"key2"->String}
                         }, 
                         mandatory
                        ]

和路过,

{  
   "header":"headerContent", 
   "footer":"footerContent", 
   "someArray":["str1", "str2"], 
   "someArrayObject"->[
                       {"key1":4, "key2":"someStringValue"},
                       {"key1":5, "key2":"someOtherStringValue"}
                      ]
} // would pass

{  
   "header":"headerContent", 
   "footer":"footerContent",
   "someArray":["str1", "str2"]
} // would notpass since someArrayObject though declared mandatory is not provided in the sample json
4

2 回答 2

3

我认为 play-json 会满足你play-json

在 play-json 中,您不会创建一个验证器,而是一个 json 转换器,它本身就是一个验证器。该框架的作者写了一系列博客文章来展示如何使用它:json-transformers

* 没有注意到你使用 play) Play 默认包含 play-json。

于 2013-06-24T16:45:38.167 回答
1

您不必推出自己的 DSL。这就是我们有模式的原因。就像使用 XML 模式来验证您的 XML 文档一样,您可以定义一个 JSON 模式来验证您的 JSON 对象。在使用 Play 构建 RESTful Web 服务时,我也有类似的要求。我通过使用JSON Schema Validator库解决了这个问题。

我使用了 JSON Schema 草案 v3。该库支持草稿 v3 和草稿 v4。您可以使用使用相同库的 Web 应用程序针对可能的 JSON 输入验证您的模式。网络应用程序托管在这里

还有一些很好的例子使用了 v4 草案。您可以从这里查看它们。

在 Play 2 中,我编写了一个将模式资源文件名作为输入的操作。这可以避免控制器操作本身的大量 JSON 验证代码。

@JsonValidate("user-register.json")
public static Result create() {
    ...
}

这样,所有 JSON 验证代码都将保留在一个位置。挺整洁的 :)

于 2014-06-17T15:20:38.987 回答