1
0
mirror of https://github.com/nlohmann/json.git synced 2025-07-21 04:22:05 +03:00

Add operator/= and operator/ to construct a JSON pointer by appending two JSON pointers, as well as convenience op/= and op= to append a single unescaped token or array index; inspired by std::filesystem::path

This commit is contained in:
garethsb-sony
2019-01-31 19:15:36 +00:00
committed by gbsylveg
parent a06e7f5d80
commit c850e9d82d
3 changed files with 120 additions and 48 deletions

View File

@ -499,7 +499,8 @@ TEST_CASE("JSON pointers")
CHECK(j[ptr] == j);
// object and children access
ptr.push_back("answer");
const std::string answer("answer");
ptr.push_back(answer);
ptr.push_back("everything");
CHECK(j[ptr] == j["answer"]["everything"]);
@ -546,24 +547,31 @@ TEST_CASE("JSON pointers")
CHECK(j[ptr] == j);
// simple field access
ptr = ptr + "pi";
ptr = ptr / "pi";
CHECK(j[ptr] == j["pi"]);
ptr.pop_back();
CHECK(j[ptr] == j);
// object and children access
ptr = ptr + "answer";
ptr = ptr + "everything";
const std::string answer("answer");
ptr /= answer;
ptr = ptr / "everything";
CHECK(j[ptr] == j["answer"]["everything"]);
ptr.pop_back();
ptr.pop_back();
CHECK(j[ptr] == j);
CHECK(ptr / ""_json_pointer == ptr);
CHECK(j["/answer"_json_pointer / "/everything"_json_pointer] == j["answer"]["everything"]);
// list children access
CHECK(j["/list"_json_pointer / 1] == j["list"][1]);
// push key which has to be encoded
ptr = ptr + "object";
ptr = ptr + "/";
ptr /= "object";
ptr = ptr / "/";
CHECK(j[ptr] == j["object"]["/"]);
CHECK(ptr.to_string() == "/object/~1");
}