Created
April 30, 2016 06:18
-
-
Save Gitmoko/964c105f11c61b9792e381beac94b3b1 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#define PICOJSON_USE_INT64 | |
#include <fstream> | |
#include <iostream> | |
#include <stdexcept> | |
#include <picojson.h> | |
#include <valijson/utils/picojson_utils.hpp> | |
#include <valijson/adapters/picojson_adapter.hpp> | |
#include <valijson/schema.hpp> | |
#include <valijson/schema_parser.hpp> | |
#include <valijson/validation_results.hpp> | |
#include <valijson/validator.hpp> | |
using std::cerr; | |
using std::endl; | |
using valijson::Schema; | |
using valijson::SchemaParser; | |
using valijson::Validator; | |
using valijson::ValidationResults; | |
using valijson::adapters::PicoJsonAdapter; | |
int json(int argc, char *argv[]) | |
{ | |
if (argc != 3) { | |
cerr << "Usage: " << argv[0] << " <schema document> <test/target document>" << endl; | |
return 1; | |
} | |
//Load the document containing the schema | |
picojson::value schemaDocument; | |
if (!valijson::utils::loadDocument(argv[1], schemaDocument)) { | |
cerr << "Failed to load schema document." << endl; | |
return 1; | |
} | |
// Load the document that is to be validated | |
picojson::value targetDocument; | |
if (!valijson::utils::loadDocument(argv[2], targetDocument)) { | |
cerr << "Failed to load target document." << endl; | |
return 1; | |
} | |
// Parse the json schema into an internal schema format | |
Schema schema; | |
SchemaParser parser; | |
PicoJsonAdapter schemaDocumentAdapter(schemaDocument); | |
try { | |
parser.populateSchema(schemaDocumentAdapter, schema); | |
} | |
catch (std::exception &e) { | |
cerr << "Failed to parse schema: " << e.what() << endl; | |
return 1; | |
} | |
// Perform validation | |
Validator validator(Validator::kWeakTypes); | |
ValidationResults results; | |
PicoJsonAdapter targetDocumentAdapter(targetDocument); | |
if (!validator.validate(schema, targetDocumentAdapter, &results)) { | |
std::cerr << "Validation failed." << endl; | |
ValidationResults::Error error; | |
unsigned int errorNum = 1; | |
while (results.popError(error)) { | |
std::string context; | |
std::vector<std::string>::iterator itr = error.context.begin(); | |
for (; itr != error.context.end(); itr++) { | |
context += *itr; | |
} | |
cerr << "Error #" << errorNum << std::endl | |
<< " context: " << context << endl | |
<< " desc: " << error.description << endl; | |
++errorNum; | |
} | |
return 1; | |
} | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment