Используйте GenericSchemaValidator и перенаправляйте проверку событий в пользовательский обработчик - PullRequest
0 голосов
/ 02 июля 2019

Попытка использовать rapidjson :: GenericSchemaValidator для проверки моего ввода json и пересылки событий SAX в мой пользовательский обработчик событий:

FILE* inputJsonFile = fopen("./json.txt", "r");

char readBuffer[4096];
rapidjson::FileReadStream readStream( inputJsonFile , readBuffer, sizeof( readBuffer ) );

rapidjson::AutoUTFInputStream<unsigned, rapidjson::FileReadStream> encodedReadStream(readStream);

MyHandler eventsHandler;
rapidjson::GenericSchemaValidator<rapidjson::SchemaDocument, MyHandler > validator(schema, eventsHandler);

//parsing and validating
rapidjson::Reader reader;    

if (!reader.Parse(encodedReadStream, validator)  && reader.GetParseErrorCode() != rapidjson::kParseErrorTermination  ) {
// Schema validator error would cause kParseErrorTermination, which will handle it in next step.

}

if (!validator.IsValid()) {
    //print the error

}

У меня два вопроса:

  1. Анализ не был остановлен, когда произошла ошибка проверки: Я следовал этому примеру , в котором говорилось: ошибка валидатора схемы привела бы к kParseErrorTermination Итак, я полагаю, что тогда анализ прекратится, если ошибка валидации была перехвачена, а это не тот случай, когда я это проверял.

  2. Как я могу переслать событие проверки в мой пользовательский обработчик? какой метод переопределить? не могу найти пример для этого.

Спасибо!

...