mirror of
https://github.com/nlohmann/json.git
synced 2026-10-12 10:13:13 +00:00
105 lines
3.0 KiB
Markdown
105 lines
3.0 KiB
Markdown
# <small>nlohmann::json_pointer::</small>json_pointer
|
|
|
|
```cpp
|
|
explicit json_pointer(const string_t& s = "");
|
|
```
|
|
|
|
Create a JSON pointer according to the syntax described in
|
|
[Section 3 of RFC6901](https://tools.ietf.org/html/rfc6901#section-3).
|
|
|
|
## Parameters
|
|
|
|
`s` (in)
|
|
: string representing the JSON pointer; if omitted, the empty string is assumed which references the whole JSON value
|
|
|
|
## Exception safety
|
|
|
|
Strong guarantee: if an exception is thrown, there are no changes to any JSON pointer.
|
|
|
|
## Exceptions
|
|
|
|
- Throws [parse_error.107](../../home/exceptions.md#jsonexceptionparse_error107) if the given JSON pointer `s` is
|
|
nonempty and does not begin with a slash (`/`); see example below.
|
|
- Throws [parse_error.108](../../home/exceptions.md#jsonexceptionparse_error108) if a tilde (`~`) in the given JSON
|
|
pointer `s` is not followed by `0` (representing `~`) or `1` (representing `/`); see example below.
|
|
|
|
## Complexity
|
|
|
|
Linear in the length of `s`.
|
|
|
|
## Examples
|
|
|
|
??? example
|
|
|
|
The example shows the construction several valid JSON pointers as well as the exceptional behavior.
|
|
|
|
```cpp
|
|
#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 (const 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 (const 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 (const json::parse_error& e)
|
|
{
|
|
std::cout << e.what() << '\n';
|
|
}
|
|
}
|
|
|
|
```
|
|
|
|
Output:
|
|
|
|
```json
|
|
[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'
|
|
|
|
```
|
|
|
|
## See also
|
|
|
|
- [JSON Pointer](../../features/json_pointer.md) - the article on JSON Pointer support
|
|
- [operator""_json_pointer](../operator_literal_json_pointer.md) user-defined string literal for JSON pointers
|
|
|
|
## Version history
|
|
|
|
- Added in version 2.0.0.
|
|
- Changed type of `s` to `string_t` in version 3.11.0.
|