技术那么多,你想看看JSON Schema的测试吗?

目录
1. 什么是JSON Schema?
2. 如何定义一个JSON Schema
3. 如何测试JSON Schema
     a) 使用JSON Schema validator GUI
     b) 在Java code里使用JSON Schema validator
4.参考文档
 

什么是JSON Schema?

JSON模式是基于JSON格式定义JSON数据结构的规范。

  • 描述现有的数据格式
  • 干净的人类和机器可读的文档
  • 完成结构验证, 用户
    • 自动化测试
    • 验证客户端提交的数据

如何定义一个JSON Schema

一个简单的例子

JSON Data 如下

"Hello, World"

JSON Schema 定义成

{
  "type": "string"
}

用这个Schema 我们就可以来验证JSON数据

根据Data来生成JSON Schema 有现成的工具可以用http://jsonschema.net/#/

##转载注明出处:http://www.cnblogs.com/wade-xu/p/4662127.html

接下来看一个基本的JSON Schema

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "User",
  "description": "demo schema",
  "type": "object",
  "properties": {
    "firstName": {
      "type": "string"
    },
    "LastName": {
      "type": "string"
    },
    "age": {
      "description": "Age in years",
      "type": "integer",
      "minimum": 0
    }
  },
  "required": [
    "firstName",
    "LastName"
  ]
}

让我们来看看在这个模式中可以使用的各种重要的关键词:

更多的关键字可以参考http://json-schema.org/latest/json-schema-validation.html

or http://tools.ietf.org/html/draft-zyp-json-schema-03#page-11

##转载注明出处: http://www.cnblogs.com/wade-xu/p/4662127.html

如何测试JSON Schema

当我们编写了一个JSON Schema 用于对客户端提交的数据进行验证之前,我们得确保我们编写的JSON Schema是正确的,我们当然就可以构造一些数据反向验证我们的JSON Schema的正确性与否。

网上有三十多个各种语言实现的JSON Schema validator, 我们用的是Java 里非常流行的,GitHub地址在这里

使用JSON Schema validator GUI

地址 http://json-schema-validator.herokuapp.com/

Validation results: success

Validation results: failure

Error Message的信息非常详细。

##转载注明出处:http://www.cnblogs.com/wade-xu/p/4662127.html

在Java code里使用JSON Schema validator

Maven pom.xml 配置

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.3.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.3.0</version>
        </dependency>
        <dependency>
          <groupId>com.github.fge</groupId>
          <artifactId>json-schema-validator</artifactId>
         <version>2.2.6</version>
    </dependency>
1 import com.fasterxml.jackson.databind.JsonNode;
2 import com.github.fge.jackson.JsonNodeReader;
3 import com.github.fge.jsonschema.core.report.ProcessingMessage;
4 import com.github.fge.jsonschema.core.report.ProcessingReport;
5 import com.github.fge.jsonschema.main.JsonSchemaFactory;

Validation success

 1     @Test
 2     public void validate_driverSet_schema() {
 3
 4         //some code to create Json schema, which we want to use data to validate
 5
 6         JsonNode schema = readJSONfile("src/test/resources/json/Schema.json");
 7
 8         JsonNode data = readJSONfile("src/test/resources/json/DataGoodExample.json");
 9
10         ProcessingReport report =
11                 JsonSchemaFactory.byDefault().getValidator().validateUnchecked(schema, data);
12         Assert.assertTrue(report.isSuccess());
13     }

##转载注明出处:http://www.cnblogs.com/wade-xu/p/4662127.html

Validation failure

 1  @Test
 2     // wrong data
 3     public void validate_driverSet_schema2() {
 4
 5         //some code to create Json schema, which we want to use data to validate
 6
 7         JsonNode data = readJSONfile("src/test/resources/json/DataBadExample.json");
 8         JsonNode schema = readJSONfile("src/test/resources/json/Schema.json");
 9
10         ProcessingReport report =
11                 JsonSchemaFactory.byDefault().getValidator().validateUnchecked(schema, data);
12         Assert.assertFalse(report.isSuccess());
13
14         // assert error message
15         Iterator<ProcessingMessage> it = report.iterator();
16         Assert.assertEquals(
17                 "instance type (string) does not match any allowed primitive type (allowed: [\"integer\"])",
18                 it.next().getMessage());
19
20     }
21
22     private JsonNode readJSONfile(String filePath) {
23         JsonNode instance = null;
24         try {
25             instance = new JsonNodeReader().fromReader(new FileReader(filePath));
26         } catch (FileNotFoundException e) {
27             e.printStackTrace();
28         } catch (IOException e) {
29             e.printStackTrace();
30         }
31         return instance;
32     }

参考文档

官方文档: http://json-schema.org/

GitHub: json-schema-validator

感谢阅读,如果您觉得本文的内容对您的学习有所帮助,您可以点击右下方的推荐按钮,您的鼓励是我创作的动力。

##转载注明出处:http://www.cnblogs.com/wade-xu/p/4662127.html

时间: 2024-10-17 06:19:48

技术那么多,你想看看JSON Schema的测试吗?的相关文章

rest-assured之Schema validation(包括JSON Schema validation及Xml Schema validation)

rest-assured从2.1.0版本开始支持  Schema 验证,包括JSON Schema validation及Xml Schema validation.我们之前断言响应体都是一个一个字段来进行断言,这样如果断言的字段比较多的话就非常的麻烦,为了解决这个问题,我们可以使用schema文件来进行响应体的断言,schema文件可以断言整个response . 1.JSON Schema validation 例如:在classpath下面放置以下的schema文件,products-sc

JSON解析器之json schema校验及代码实现

项目有个业务需要对JSON格式的数据校验,需要一些必要字段的验证,实现一个JSON解析器.所以学习了json schema的语法和解析器的实现. 本篇是先说通用的JSON验证,也就是json schema和在java代码中的校验使用. json schema是什么 json schema实际上就是一个JSON文件,文件内容是对JSON数据的结构及内容的约束,就像是xml文件的xsd文件对xml的验证. 先看一下简单的schema内容 1 { 2 "$schema": "htt

JSON Schema(模式)

JSON Schema指的是数据交换中的一种虚拟的"合同". JSON验证器负责验证语法错误,JSON Schema负责提供一致性检验. JSON Schema是数据接收方额第一道防线,也是数据发送方节约时间.保证数据正确的好工具. JSON Schema可以解决下列有关一致性验证的问题. 1.  值的数据类型是否正确:可以具体规定一个值是数字.字符串等类型: 2.  是否包含所需的数据:可以规定哪些数据是需要的,哪些是不需要的: 3.  值的形式是不是我需要的:可以指定范围.最小值和

json schema校验

工作中使用到了json schema格式校验的问题,在网上查了些资料,结合自己的理解记录一下. json schema可以对json结果字符串做出一些约束,例如: 1. 值类型是:array, object, number, string等等 2.值类型必须是枚举中的一个 3. 字符串的长度限制 4. 对字符串判断是否符合正则表达式 5. array元素个数 6. object对象必要属性 测试schema文件 1 { 2 "$schema": "http://json-sc

怎样用Google APIs和Google的应用系统进行集成(8)----怎样把Google Blogger(博客)的JSON Schema转换成XML的Schema(XSD)?

在Google RESTFul API中,Google Blogger API(Google博客API)应该和我们的生活离得近期:由于差点儿非常多人每天都在看博客,都在写博客,都听说过博客.在前面的Google的应用系统进行集成(5)和Google的应用系统进行集成(6)的系列文章中.我们提到了怎样把Google Calendar和Google Tasks的JSON Schema转换成XML的XSD的Schema.从博客的訪问量来看,还是有非常多志同道合的朋友们对这个比較感兴趣,因此,这个章节.

Json.Net使用JSON Schema验证JSON格式

Json.NET supports the JSON Schema standard via the JsonSchema and JsonValidatingReader classes. It sits under the Newtonsoft.Json.Schema namespace. Json.NET通过JsonSchema和JsonValidatingReader类,支持JSON Schema标准.这两个类位于Newtonsoft.Json.Schema命名空间. JSON Sche

json schema

一.简介 我们先看下面的json数据 { "id": 1, "name": "g2", "desc":"b2" } 假设, 我们要求id为long型, id.name非空.desc可空.如何衡量json数据是有效的呢?现在流行的json schema 是用来校验json数据是否合法. 详情请移至 https://github.com/daveclayton/json-schema-validator 二.参

Json.Net使用JSON Schema验证JSON格式【实例】

给出一个Json,验证其格式是否符合规则. { "coord": { //对象 "lon": 145.77, "lat": -16.92 }, "sys": { //对象 "type": 1, "id": 8166, "message": 0.0402, "country": "AU", "sunrise":

如何用Google APIs和Google的应用系统进行集成(8)----如何把Google Blogger(博客)的JSON Schema转换成XML的Schema(XSD)?

在Google RESTFul API中,Google Blogger API(Google博客API)应该和我们的生活离得最近:因为几乎很多人每天都在看博客,都在写博客,都听说过博客.在前面的Google的应用系统进行集成(5)和Google的应用系统进行集成(6)的系列文章中,我们提到了如何把Google Calendar和Google Tasks的JSON Schema转换成XML的XSD的Schema:从博客的访问量来看,还是有很多志同道合的朋友们对这个比较感兴趣,因此,这个章节,我继续