@@ -43,7 +43,7 @@ class basic_json_cursor : public basic_staj_cursor<CharT>, private virtual ser_c
4343 json_source_adaptor<Source> source_;
4444 basic_json_parser<CharT,Allocator> parser_;
4545 basic_staj_visitor<CharT> cursor_visitor_;
46- bool done_;
46+ bool done_{ false } ;
4747
4848public:
4949
@@ -57,9 +57,9 @@ class basic_json_cursor : public basic_staj_cursor<CharT>, private virtual ser_c
5757 typename std::enable_if<!std::is_constructible<jsoncons::basic_string_view<CharT>,Sourceable>::value>::type* = 0 )
5858 : source_(std::forward<Sourceable>(source)),
5959 parser_ (options,err_handler,alloc),
60- cursor_visitor_(accept_all),
61- done_(false )
60+ cursor_visitor_(accept_all)
6261 {
62+ parser_.cursor_mode (true );
6363 if (!done ())
6464 {
6565 std::error_code local_ec;
@@ -86,9 +86,9 @@ class basic_json_cursor : public basic_staj_cursor<CharT>, private virtual ser_c
8686 typename std::enable_if<std::is_constructible<jsoncons::basic_string_view<CharT>,Sourceable>::value>::type* = 0)
8787 : source_(),
8888 parser_(options, err_handler, alloc),
89- cursor_visitor_(accept_all),
90- done_(false )
89+ cursor_visitor_(accept_all)
9190 {
91+ parser_.cursor_mode (true );
9292 initialize_with_string_view (std::forward<Sourceable>(source));
9393 }
9494
@@ -139,9 +139,10 @@ class basic_json_cursor : public basic_staj_cursor<CharT>, private virtual ser_c
139139 typename std::enable_if<!std::is_constructible<jsoncons::basic_string_view<CharT>,Sourceable>::value>::type* = 0)
140140 : source_(std::forward<Sourceable>(source)),
141141 parser_(options,err_handler,alloc),
142- cursor_visitor_(accept_all),
143- done_(false )
142+ cursor_visitor_(accept_all)
144143 {
144+ parser_.cursor_mode (true );
145+
145146 if (!done ())
146147 {
147148 std::error_code local_ec;
@@ -169,9 +170,9 @@ class basic_json_cursor : public basic_staj_cursor<CharT>, private virtual ser_c
169170 typename std::enable_if<std::is_constructible<jsoncons::basic_string_view<CharT>,Sourceable>::value>::type* = 0)
170171 : source_(),
171172 parser_(options, err_handler, alloc),
172- cursor_visitor_(accept_all),
173- done_(false )
173+ cursor_visitor_(accept_all)
174174 {
175+ parser_.cursor_mode (true );
175176 initialize_with_string_view (std::forward<Sourceable>(source), ec);
176177 }
177178
@@ -279,9 +280,23 @@ class basic_json_cursor : public basic_staj_cursor<CharT>, private virtual ser_c
279280 void read_to (basic_json_visitor<CharT>& visitor,
280281 std::error_code& ec) override
281282 {
282- if (cursor_visitor_.event ().send_json_event (visitor, *this , ec))
283+ if (is_begin_container (current ().event_type ()))
284+ {
285+ parser_.cursor_mode (false );
286+ parser_.mark_level (parser_.level ());
287+ if (cursor_visitor_.event ().send_json_event (visitor, *this , ec))
288+ {
289+ read_next (visitor, ec);
290+ }
291+ parser_.cursor_mode (true );
292+ parser_.mark_level (0 );
293+ }
294+ else
283295 {
284- read_next (visitor, ec);
296+ if (cursor_visitor_.event ().send_json_event (visitor, *this , ec))
297+ {
298+ read_next (visitor, ec);
299+ }
285300 }
286301 }
287302
0 commit comments