mirror of
https://github.com/elasota/Aerofoil.git
synced 2025-09-23 14:53:52 +00:00
Convert DITLs to JSON
This commit is contained in:
78
rapidjson/example/schemavalidator/schemavalidator.cpp
Normal file
78
rapidjson/example/schemavalidator/schemavalidator.cpp
Normal file
@@ -0,0 +1,78 @@
|
||||
// Schema Validator example
|
||||
|
||||
// The example validates JSON text from stdin with a JSON schema specified in the argument.
|
||||
|
||||
#include "rapidjson/error/en.h"
|
||||
#include "rapidjson/filereadstream.h"
|
||||
#include "rapidjson/schema.h"
|
||||
#include "rapidjson/stringbuffer.h"
|
||||
#include "rapidjson/prettywriter.h"
|
||||
|
||||
using namespace rapidjson;
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
if (argc != 2) {
|
||||
fprintf(stderr, "Usage: schemavalidator schema.json < input.json\n");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
// Read a JSON schema from file into Document
|
||||
Document d;
|
||||
char buffer[4096];
|
||||
|
||||
{
|
||||
FILE *fp = fopen(argv[1], "r");
|
||||
if (!fp) {
|
||||
printf("Schema file '%s' not found\n", argv[1]);
|
||||
return -1;
|
||||
}
|
||||
FileReadStream fs(fp, buffer, sizeof(buffer));
|
||||
d.ParseStream(fs);
|
||||
if (d.HasParseError()) {
|
||||
fprintf(stderr, "Schema file '%s' is not a valid JSON\n", argv[1]);
|
||||
fprintf(stderr, "Error(offset %u): %s\n",
|
||||
static_cast<unsigned>(d.GetErrorOffset()),
|
||||
GetParseError_En(d.GetParseError()));
|
||||
fclose(fp);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
fclose(fp);
|
||||
}
|
||||
|
||||
// Then convert the Document into SchemaDocument
|
||||
SchemaDocument sd(d);
|
||||
|
||||
// Use reader to parse the JSON in stdin, and forward SAX events to validator
|
||||
SchemaValidator validator(sd);
|
||||
Reader reader;
|
||||
FileReadStream is(stdin, buffer, sizeof(buffer));
|
||||
if (!reader.Parse(is, validator) && reader.GetParseErrorCode() != kParseErrorTermination) {
|
||||
// Schema validator error would cause kParseErrorTermination, which will handle it in next step.
|
||||
fprintf(stderr, "Input is not a valid JSON\n");
|
||||
fprintf(stderr, "Error(offset %u): %s\n",
|
||||
static_cast<unsigned>(reader.GetErrorOffset()),
|
||||
GetParseError_En(reader.GetParseErrorCode()));
|
||||
}
|
||||
|
||||
// Check the validation result
|
||||
if (validator.IsValid()) {
|
||||
printf("Input JSON is valid.\n");
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
else {
|
||||
printf("Input JSON is invalid.\n");
|
||||
StringBuffer sb;
|
||||
validator.GetInvalidSchemaPointer().StringifyUriFragment(sb);
|
||||
fprintf(stderr, "Invalid schema: %s\n", sb.GetString());
|
||||
fprintf(stderr, "Invalid keyword: %s\n", validator.GetInvalidSchemaKeyword());
|
||||
sb.Clear();
|
||||
validator.GetInvalidDocumentPointer().StringifyUriFragment(sb);
|
||||
fprintf(stderr, "Invalid document: %s\n", sb.GetString());
|
||||
// Detailed violation report is available as a JSON value
|
||||
sb.Clear();
|
||||
PrettyWriter<StringBuffer> w(sb);
|
||||
validator.GetError().Accept(w);
|
||||
fprintf(stderr, "Error report:\n%s\n", sb.GetString());
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user