Skip to content

nlohmann::json_pointer::json_pointer

explicit json_pointer(const string_t& s = "");

Create a JSON pointer according to the syntax described in Section 3 of RFC6901.

Parameters

s (in)
string representing the JSON pointer; if omitted, the empty string is assumed which references the whole JSON value

Exceptions

  • Throws parse_error.107 if the given JSON pointer s is nonempty and does not begin with a slash (/); see example below.
  • Throws parse_error.108 if a tilde (~) in the given JSON pointer s is not followed by 0 (representing ~) or 1 (representing /); see example below.

Examples

Example

The example shows the construction several valid JSON pointers as well as the exceptional behavior.

#include <iostream>
#include <nlohmann/json.hpp>

using json = nlohmann::json;

int main()
{
    // correct JSON pointers
    json::json_pointer p1;
    json::json_pointer p2("");
    json::json_pointer p3("/");
    json::json_pointer p4("//");
    json::json_pointer p5("/foo/bar");
    json::json_pointer p6("/foo/bar/-");
    json::json_pointer p7("/foo/~0");
    json::json_pointer p8("/foo/~1");

    // error: JSON pointer does not begin with a slash
    try
    {
        json::json_pointer p9("foo");
    }
    catch (json::parse_error& e)
    {
        std::cout << e.what() << '\n';
    }

    // error: JSON pointer uses escape symbol ~ not followed by 0 or 1
    try
    {
        json::json_pointer p10("/foo/~");
    }
    catch (json::parse_error& e)
    {
        std::cout << e.what() << '\n';
    }

    // error: JSON pointer uses escape symbol ~ not followed by 0 or 1
    try
    {
        json::json_pointer p11("/foo/~3");
    }
    catch (json::parse_error& e)
    {
        std::cout << e.what() << '\n';
    }
}

Output:

[json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'foo'
[json.exception.parse_error.108] parse error: escape character '~' must be followed with '0' or '1'
[json.exception.parse_error.108] parse error: escape character '~' must be followed with '0' or '1'

Version history

  • Added in version 2.0.0.
  • Changed type of s to string_t in version 3.11.0.

Last update: May 1, 2022
Back to top