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
309acb44
Unverified
Commit
309acb44
authored
4 years ago
by
Niels Lohmann
Committed by
GitHub
4 years ago
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #2153 from dota17/issue#1972
Fix issue#1972
parents
53ef0767
8cd39578
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
49 additions
and
2 deletions
+49
-2
include/nlohmann/detail/input/json_sax.hpp
include/nlohmann/detail/input/json_sax.hpp
+1
-1
single_include/nlohmann/json.hpp
single_include/nlohmann/json.hpp
+1
-1
test/src/unit-class_parser.cpp
test/src/unit-class_parser.cpp
+47
-0
No files found.
include/nlohmann/detail/input/json_sax.hpp
View file @
309acb44
...
@@ -452,7 +452,7 @@ class json_sax_dom_callback_parser
...
@@ -452,7 +452,7 @@ class json_sax_dom_callback_parser
ref_stack
.
pop_back
();
ref_stack
.
pop_back
();
keep_stack
.
pop_back
();
keep_stack
.
pop_back
();
if
(
not
ref_stack
.
empty
()
and
ref_stack
.
back
()
and
ref_stack
.
back
()
->
is_
object
())
if
(
not
ref_stack
.
empty
()
and
ref_stack
.
back
()
and
ref_stack
.
back
()
->
is_
structured
())
{
{
// remove discarded value
// remove discarded value
for
(
auto
it
=
ref_stack
.
back
()
->
begin
();
it
!=
ref_stack
.
back
()
->
end
();
++
it
)
for
(
auto
it
=
ref_stack
.
back
()
->
begin
();
it
!=
ref_stack
.
back
()
->
end
();
++
it
)
...
...
This diff is collapsed.
Click to expand it.
single_include/nlohmann/json.hpp
View file @
309acb44
...
@@ -5358,7 +5358,7 @@ class json_sax_dom_callback_parser
...
@@ -5358,7 +5358,7 @@ class json_sax_dom_callback_parser
ref_stack
.
pop_back
();
ref_stack
.
pop_back
();
keep_stack
.
pop_back
();
keep_stack
.
pop_back
();
if
(
not
ref_stack
.
empty
()
and
ref_stack
.
back
()
and
ref_stack
.
back
()
->
is_
object
())
if
(
not
ref_stack
.
empty
()
and
ref_stack
.
back
()
and
ref_stack
.
back
()
->
is_
structured
())
{
{
// remove discarded value
// remove discarded value
for
(
auto
it
=
ref_stack
.
back
()
->
begin
();
it
!=
ref_stack
.
back
()
->
end
();
++
it
)
for
(
auto
it
=
ref_stack
.
back
()
->
begin
();
it
!=
ref_stack
.
back
()
->
end
();
++
it
)
...
...
This diff is collapsed.
Click to expand it.
test/src/unit-class_parser.cpp
View file @
309acb44
...
@@ -1489,6 +1489,18 @@ TEST_CASE("parser class")
...
@@ -1489,6 +1489,18 @@ TEST_CASE("parser class")
[1,2,[3,4,5],4,5]
[1,2,[3,4,5],4,5]
)"
;
)"
;
auto
structured_array
=
R"(
[
1,
{
"foo": "bar"
},
{
"qux": "baz"
}
]
)"
;
SECTION
(
"filter nothing"
)
SECTION
(
"filter nothing"
)
{
{
json
j_object
=
json
::
parse
(
s_object
,
[](
int
,
json
::
parse_event_t
,
const
json
&
)
json
j_object
=
json
::
parse
(
s_object
,
[](
int
,
json
::
parse_event_t
,
const
json
&
)
...
@@ -1557,6 +1569,41 @@ TEST_CASE("parser class")
...
@@ -1557,6 +1569,41 @@ TEST_CASE("parser class")
CHECK
(
j_array
==
json
({
1
,
{
3
,
4
,
5
},
4
,
5
}));
CHECK
(
j_array
==
json
({
1
,
{
3
,
4
,
5
},
4
,
5
}));
}
}
SECTION
(
"filter object in array"
)
{
json
j_filtered1
=
json
::
parse
(
structured_array
,
[](
int
,
json
::
parse_event_t
e
,
const
json
&
parsed
)
{
if
(
e
==
json
::
parse_event_t
::
object_end
and
parsed
.
contains
(
"foo"
))
{
return
false
;
}
else
{
return
true
;
}
});
// the specified object will be discarded, and removed.
CHECK
(
j_filtered1
.
size
()
==
2
);
CHECK
(
j_filtered1
==
json
({
1
,
{{
"qux"
,
"baz"
}}}));
json
j_filtered2
=
json
::
parse
(
structured_array
,
[](
int
,
json
::
parse_event_t
e
,
const
json
&
parsed
)
{
if
(
e
==
json
::
parse_event_t
::
object_end
)
{
return
false
;
}
else
{
return
true
;
}
});
// removed all objects in array.
CHECK
(
j_filtered2
.
size
()
==
1
);
CHECK
(
j_filtered2
==
json
({
1
}));
}
SECTION
(
"filter specific events"
)
SECTION
(
"filter specific events"
)
{
{
SECTION
(
"first closing event"
)
SECTION
(
"first closing event"
)
...
...
This diff is collapsed.
Click to expand it.
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