Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
J
json
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Libraries
json
Commits
f883a04c
Commit
f883a04c
authored
Apr 17, 2016
by
Niels
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
more documentation
parent
40e899a8
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
102 additions
and
22 deletions
+102
-22
doc/examples/json_pointer.cpp
doc/examples/json_pointer.cpp
+46
-0
doc/examples/json_pointer.link
doc/examples/json_pointer.link
+1
-0
doc/examples/json_pointer.output
doc/examples/json_pointer.output
+3
-0
src/json.hpp
src/json.hpp
+26
-11
src/json.hpp.re2c
src/json.hpp.re2c
+26
-11
No files found.
doc/examples/json_pointer.cpp
0 → 100644
View file @
f883a04c
#include <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
(
std
::
domain_error
&
e
)
{
std
::
cout
<<
"domain_error: "
<<
e
.
what
()
<<
'\n'
;
}
// error: JSON pointer uses escape symbol ~ not followed by 0 or 1
try
{
json
::
json_pointer
p10
(
"/foo/~"
);
}
catch
(
std
::
domain_error
&
e
)
{
std
::
cout
<<
"domain_error: "
<<
e
.
what
()
<<
'\n'
;
}
// error: JSON pointer uses escape symbol ~ not followed by 0 or 1
try
{
json
::
json_pointer
p11
(
"/foo/~3"
);
}
catch
(
std
::
domain_error
&
e
)
{
std
::
cout
<<
"domain_error: "
<<
e
.
what
()
<<
'\n'
;
}
}
doc/examples/json_pointer.link
0 → 100644
View file @
f883a04c
<a target="_blank" href="http://melpon.org/wandbox/permlink/9OR6xQ1rRZDA0W94"><b>online</b></a>
\ No newline at end of file
doc/examples/json_pointer.output
0 → 100644
View file @
f883a04c
domain_error: JSON pointer must be empty or begin with '/'
domain_error: escape error: '~' must be followed with '0' or '1'
domain_error: escape error: '~' must be followed with '0' or '1'
src/json.hpp
View file @
f883a04c
...
...
@@ -8913,11 +8913,26 @@ basic_json_parser_63:
friend
class
basic_json
;
public:
/// empty reference token
json_pointer
()
=
default
;
/*!
@brief create JSON pointer
Create a JSON pointer according to the syntax described in
[Section 3 of RFC6901](https://tools.ietf.org/html/rfc6901#section-3).
@param[in] s string representing the JSON pointer; if omitted, the
empty string is assumed which references the whole JSON
value
@throw std::domain_error if reference token is nonempty and does not
begin with a slash (`/`), or if a tilde (`~`) is not followed
by `0` (representing `~`) or `1` (representing `/`).
@liveexample{The example shows the construction several valid JSON
pointers as well as the exceptional behavior.,json_pointer}
/// nonempty reference token
explicit
json_pointer
(
const
std
::
string
&
s
)
@since version 2.0.0
*/
explicit
json_pointer
(
const
std
::
string
&
s
=
""
)
:
reference_tokens
(
split
(
s
))
{}
...
...
@@ -8943,19 +8958,19 @@ basic_json_parser_63:
{
result
=
&
result
->
operator
[](
reference_token
);
}
continue
;
break
;
}
case
value_t
:
:
object
:
{
result
=
&
result
->
operator
[](
reference_token
);
continue
;
break
;
}
case
value_t
:
:
array
:
{
result
=
&
result
->
operator
[](
static_cast
<
size_t
>
(
std
::
stoi
(
reference_token
)));
continue
;
break
;
}
default:
...
...
@@ -9066,7 +9081,7 @@ basic_json_parser_63:
case
value_t
:
:
object
:
{
ptr
=
&
ptr
->
operator
[](
reference_token
);
continue
;
break
;
}
case
value_t
:
:
array
:
...
...
@@ -9078,7 +9093,7 @@ basic_json_parser_63:
") is out of range"
);
}
ptr
=
&
ptr
->
operator
[](
static_cast
<
size_t
>
(
std
::
stoi
(
reference_token
)));
continue
;
break
;
}
default:
...
...
@@ -9100,7 +9115,7 @@ basic_json_parser_63:
case
value_t
:
:
object
:
{
ptr
=
&
ptr
->
at
(
reference_token
);
continue
;
break
;
}
case
value_t
:
:
array
:
...
...
@@ -9112,7 +9127,7 @@ basic_json_parser_63:
") is out of range"
);
}
ptr
=
&
ptr
->
at
(
static_cast
<
size_t
>
(
std
::
stoi
(
reference_token
)));
continue
;
break
;
}
default:
...
...
src/json.hpp.re2c
View file @
f883a04c
...
...
@@ -8223,11 +8223,26 @@ class basic_json
friend class basic_json;
public:
/// empty reference token
json_pointer() = default;
/*!
@brief create JSON pointer
Create a JSON pointer according to the syntax described in
[Section 3 of RFC6901](https://tools.ietf.org/html/rfc6901#section-3).
@param[in] s string representing the JSON pointer; if omitted, the
empty string is assumed which references the whole JSON
value
@throw std::domain_error if reference token is nonempty and does not
begin with a slash (`/`), or if a tilde (`~`) is not followed
by `0` (representing `~`) or `1` (representing `/`).
@liveexample{The example shows the construction several valid JSON
pointers as well as the exceptional behavior.,json_pointer}
/// nonempty reference token
explicit json_pointer(const std::string& s)
@since version 2.0.0
*/
explicit json_pointer(const std::string& s = "")
: reference_tokens(split(s))
{}
...
...
@@ -8253,19 +8268,19 @@ class basic_json
{
result = &result->operator[](reference_token);
}
continue
;
break
;
}
case value_t::object:
{
result = &result->operator[](reference_token);
continue
;
break
;
}
case value_t::array:
{
result = &result->operator[](static_cast<size_t>(std::stoi(reference_token)));
continue
;
break
;
}
default:
...
...
@@ -8376,7 +8391,7 @@ class basic_json
case value_t::object:
{
ptr = &ptr->operator[](reference_token);
continue
;
break
;
}
case value_t::array:
...
...
@@ -8388,7 +8403,7 @@ class basic_json
") is out of range");
}
ptr = &ptr->operator[](static_cast<size_t>(std::stoi(reference_token)));
continue
;
break
;
}
default:
...
...
@@ -8410,7 +8425,7 @@ class basic_json
case value_t::object:
{
ptr = &ptr->at(reference_token);
continue
;
break
;
}
case value_t::array:
...
...
@@ -8422,7 +8437,7 @@ class basic_json
") is out of range");
}
ptr = &ptr->at(static_cast<size_t>(std::stoi(reference_token)));
continue
;
break
;
}
default:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment