Ronald Currier
Ronald Currier

Reputation: 585

C++ nlohmann/json how to use runtime provided json_pointers to read json values

I am using the json parser Json for Modern C++ (https://github.com/nlohmann/json). I know that I can get the value of a JSON value with a JSON_Pointer:

auto v1 = j["/a/b/c"_json_pointer];

But how would I go about getting the value if the JSON Pointer is defined at runtime (passed into my function)?

std:string s1 = "/a/b/c";
auto v1 = j[s1]; // doesn't work

You can't append "json_pointer" to either the std::string assignment or to the s1 variable. Is there a function that will convert a std::string to a json_pointer? The caller knows nothing about json and can't have access to the "json.hpp" header. I've also tried

std::string s1 = "/a/b/c";
json_pointer p1(s1);

but "json_pointer" class is undefined. Other than this issue this is a great library that does everything else I need. TIA.

Upvotes: 2

Views: 4668

Answers (1)

Taywee
Taywee

Reputation: 1335

Look at the source code:

inline nlohmann::json::json_pointer operator "" _json_pointer(const char* s, std::size_t)
{
    return nlohmann::json::json_pointer(s);
}

If json_pointer is undefined, then you aren't using the right namespaces. Try

using nlohmann::json::json_pointer;
std::string s1 = "/a/b/c";
json_pointer p1(s1);

Upvotes: 7

Related Questions