博客搬家,原地址: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