スキーマ に対してJSONを検証できる安定したライブラリはありますか?
json-schema.org は 実装のリスト を提供します。特に、CとC++が欠落しています。
C++ JSONスキーマバリデーターを簡単に見つけることができない理由はありますか?
受信したJSONファイルをすばやく検証する方法を他の誰かが望んでいませんか?
スキーマに対してJSONを検証できる安定したライブラリはありますか?
私はグーグルでいくつかのヒットを見つけました:
PythonまたはJavascriptインタープリターをアプリにプラグインして、既に見つかったバリデーター実装のネイティブバージョンを実行することもできます。
C++ JSONスキーマバリデーターを簡単に見つけることができない理由はありますか?
JSONはWebテクノロジーとして生まれたものであり、C/C++はWebアプリの実装に不利になっていると思います。
Valijson は、Boostのみに依存する非常に優れたライブラリです(そして、私は実際に change thatを望んでいます)。特定のJSONパーサーにさえ依存せず、JsonCpp、rapidjson、json11などの最も一般的に使用されるライブラリー用のアダプターを提供します。
コードは冗長に見えるかもしれませんが、いつでもヘルパーを書くことができます(JsonCppの例):
#include <json-cpp/json.h>
#include <sstream>
#include <valijson/adapters/jsoncpp_adapter.hpp>
#include <valijson/schema.hpp>
#include <valijson/schema_parser.hpp>
#include <valijson/validation_results.hpp>
#include <valijson/validator.hpp>
void validate_json(Json::Value const& root, std::string const& schema_str)
{
using valijson::Schema;
using valijson::SchemaParser;
using valijson::Validator;
using valijson::ValidationResults;
using valijson::adapters::JsonCppAdapter;
Json::Value schema_js;
{
Json::Reader reader;
std::stringstream schema_stream(schema_str);
if (!reader.parse(schema_stream, schema_js, false))
throw std::runtime_error("Unable to parse the embedded schema: "
+ reader.getFormatedErrorMessages());
}
JsonCppAdapter doc(root);
JsonCppAdapter schema_doc(schema_js);
SchemaParser parser(SchemaParser::kDraft4);
Schema schema;
parser.populateSchema(schema_doc, schema);
Validator validator(schema);
validator.setStrict(false);
ValidationResults results;
if (!validator.validate(doc, &results))
{
std::stringstream err_oss;
err_oss << "Validation failed." << std::endl;
ValidationResults::Error error;
int error_num = 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;
err_oss << "Error #" << error_num << std::endl
<< " context: " << context << std::endl
<< " desc: " << error.description << std::endl;
++error_num;
}
throw std::runtime_error(err_oss.str());
}
}
UniversalContainer(libuc)を試すことができます。 http://www.greatpanic.com/code.html 。このライブラリでコンテナコントラクト/スキーマチェッククラスを探しています。スキーマ形式は不格好ですが、気になるすべてを処理し、特定のインスタンスがスキーマを満たさない理由に関する合理的なレポートを提供する必要があります。
スキーマに対してJSONを検証できる安定したライブラリはありますか?
私はそれをスキーマに対するJSON検証に使用しています(ほとんどの場合)。テスト済みで安定しているようです(githubリポジトリによると、v1.1.0は最新リリースのようです)。
多言語アプローチに対応できる場合、Ajvは堅実なJavaScript実装のように見えます。
注:ajv-cliもあります