Merge branch 'master' of https://github.com/Spuriosity1/json-schema-validator
This commit is contained in:
commit
7fc4dbe967
@ -121,6 +121,8 @@ access nlohmann-json:
|
||||
a sub-directory (via `add_subdirectory()`), 2 and 3 can be
|
||||
assisted by setting the `nlohmann_json_DIR`-variable.
|
||||
|
||||
For 1 there is an example of you to do in example/cmake-submodule.
|
||||
|
||||
### Building with Hunter package manager
|
||||
|
||||
To enable access to nlohmann json library, Hunter can be used. Just run with HUNTER_ENABLED=ON option. No further dependencies needed
|
||||
|
||||
24
example/cmake-submodule/CMakeLists.txt
Normal file
24
example/cmake-submodule/CMakeLists.txt
Normal file
@ -0,0 +1,24 @@
|
||||
cmake_minimum_required(VERSION 3.2)
|
||||
|
||||
project(simple-json-validator-as-submodule-test)
|
||||
|
||||
# absolute-path
|
||||
set(PATH_TO_NLOHMANN_JSON_REPO $ENV{HOME}/devel/upstream/json)
|
||||
|
||||
# build shared library
|
||||
set(BUILD_SHARED_LIBS ON)
|
||||
|
||||
# JSON library
|
||||
option(JSON_BuildTests OFF)
|
||||
add_subdirectory(${PATH_TO_NLOHMANN_JSON_REPO}
|
||||
json-binary-dir
|
||||
EXCLUDE_FROM_ALL)
|
||||
|
||||
# JSON SCHEMA VALIDATOR library
|
||||
option(BUILD_TESTS OFF)
|
||||
add_subdirectory(../..
|
||||
json-validator-binary-dir
|
||||
EXCLUDE_FROM_ALL)
|
||||
|
||||
add_executable(validate validate.cpp)
|
||||
target_link_libraries(validate nlohmann_json_schema_validator)
|
||||
20
example/cmake-submodule/validate.cpp
Normal file
20
example/cmake-submodule/validate.cpp
Normal file
@ -0,0 +1,20 @@
|
||||
#include <nlohmann/json-schema.hpp>
|
||||
|
||||
#include <iostream>
|
||||
|
||||
int main(void)
|
||||
{
|
||||
nlohmann::json schema_json{{"type", "number"}};
|
||||
nlohmann::json_schema::json_validator validator;
|
||||
|
||||
validator.set_root_schema(schema_json);
|
||||
|
||||
validator.validate(1);
|
||||
try {
|
||||
validator.validate("\"1\"");
|
||||
} catch (const std::exception &e) {
|
||||
std::cerr << "expected exception: " << e.what() << "\n";
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
@ -66,7 +66,7 @@ const nlohmann::json patch_schema = R"patch({
|
||||
}
|
||||
}
|
||||
})patch"_json;
|
||||
}; // namespace
|
||||
} // namespace
|
||||
|
||||
namespace nlohmann
|
||||
{
|
||||
|
||||
@ -13,6 +13,7 @@
|
||||
#include <memory>
|
||||
#include <set>
|
||||
#include <sstream>
|
||||
#include <deque>
|
||||
|
||||
using nlohmann::json;
|
||||
using nlohmann::json_patch;
|
||||
@ -171,11 +172,31 @@ public:
|
||||
auto unresolved = file.unresolved.find(fragment);
|
||||
if (unresolved != file.unresolved.end())
|
||||
schema::make(value, this, {}, {{new_uri}});
|
||||
else // no, nothing ref'd it, keep for later
|
||||
// could use fragment here, but better not to: if key is an integer the pointer will be interpreted as
|
||||
// an array. This cannot be the case here, so we force using key as a string when storing the
|
||||
// unknown_keyword-schema.
|
||||
file.unknown_keywords[uri.pointer()][key] = value;
|
||||
else { // no, nothing ref'd it, keep for later
|
||||
|
||||
// need to create an object for each reference-token in the
|
||||
// JSON-Pointer When not existing, a stringified integer reference
|
||||
// token (e.g. "123") in the middle of the pointer will be
|
||||
// interpreted a an array-index and an array will be created.
|
||||
|
||||
// json_pointer's reference_tokens is private - get them
|
||||
std::deque<std::string> ref_tokens;
|
||||
auto uri_pointer = uri.pointer();
|
||||
while (!uri_pointer.empty()) {
|
||||
ref_tokens.push_front(uri_pointer.back());
|
||||
uri_pointer.pop_back();
|
||||
}
|
||||
|
||||
// for each token create an object, if not already existing
|
||||
auto unk_kw = &file.unknown_keywords;
|
||||
for (auto &rt : ref_tokens) {
|
||||
auto existing_object = unk_kw->find(rt);
|
||||
if (existing_object == unk_kw->end())
|
||||
(*unk_kw)[rt] = json::object();
|
||||
unk_kw = &(*unk_kw)[rt];
|
||||
}
|
||||
(*unk_kw)[key] = value;
|
||||
}
|
||||
|
||||
// recursively add possible subschemas of unknown keywords
|
||||
if (value.type() == json::value_t::object)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user