rapidjson Schema

rapidjson Schema博客搬家,原地址:https://langzi989.github.io/2017/05/27/rapidjsonSchema/本系列文章以例子的方式进行呈现。/**JsonSchema本质上是一个json,其作用是用于校验Json,使用schema对json进行校验,*可以让代码安全的去当问DOM,而不需要去检查类型或者键值的存在等等。这也能确保输*出的json符合特定的sc…

博客搬家,原地址:https://langzi989.github.io/2017/05/27/rapidjsonSchema/

本系列文章以例子的方式进行呈现。

/* * JsonSchema本质上是一个json,其作用是用于校验Json,使用schema对json进行校验, * 可以让代码安全的去当问DOM,而不需要去检查类型或者键值的存在等等。这也能确保输 * 出的json符合特定的schema。 */
#include "rapidjson/schema.h"
#include "rapidjson/stringbuffer.h"
#include <stdio.h>
#include <string>
#include <string.h>

using namespace std;
using namespace rapidjson;

/*使用JsonSchema校校验json格式的流程: * 1. 将schema(模板)解析成一个Document * 2. 然后将Document编译成一个SchemaDocument * 3. 通过上述SchemaDocument创建一个SchemaValidator。 * 4. 然后通过document.Accept(validator)去校验一个json,获取校验结果。 *注意: * 1. 一个SchemaDocument能被多个SchemaValidator引用,他不会被SchemaValidator修改。 * 2. 可以重复使用SchemaValidator校验多个文件。在校验其他文件之前,必须先调用validator.Reset()。 *JsonSchema的格式: * 1. JsonSchema实质上是一个json数据。 * 2. JsonSchema与其他json数据不同的是它在每一个对象和元素中定义了他们的类型type,属性(如object的properties,以及integer的minimum等等), * 同时,我们可以通过JsonSchema对json的值的类型以及取值范围等进行限定。schema中必须的值需要显示的声明在required中。 */

bool ValidateJson() { 
   
  string testSchema = "{\"type\":\"object\", \"properties\":{\"code\":{\"type\":\"string\"}, \"int\":{\"type\":\"integer\", \"minimum\":0}}, \"required\":[\"int\",\"code\"]}";
  Document sd;
  if (sd.Parse(testSchema.c_str()).HasParseError()) { 
   
    printf("jsonSchema is not valid : %s", testSchema.c_str());
    return false;
  }

  //创建SchemaDocument
  SchemaDocument schema(sd);

  Document d;
  if (d.Parse("{\"code\":123, \"int\":1}").HasParseError()) { 
   
    printf("Document is not a valid json");
    return false;
  }

  SchemaValidator validator(schema);

  if (!d.Accept(validator)) { 
   
    StringBuffer sb;
    validator.GetInvalidSchemaPointer().StringifyUriFragment(sb);
    printf("Invalid schema: %s\n", sb.GetString());
    printf("Invalid keyword: %s\n", validator.GetInvalidSchemaKeyword());
    sb.Clear();
    validator.GetInvalidDocumentPointer().StringifyUriFragment(sb);
    printf("Invalid document:%s\n ", sb.GetString());
    return false;
  } else { 
   
    printf("符合schemas模式\n");
    return true;
  }
}

int main() { 
   
  ValidateJson();
}

今天的文章rapidjson Schema分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/9729.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注