Skip to content

nlohmann::json_sax::end_array

virtualboolend_array()=0;

The end of an array was read.

Return value

Whether parsing should proceed.

Examples

Example

The example below shows how the SAX interface is used.

#include<iostream>
#include<iomanip>
#include<sstream>
#include<nlohmann/json.hpp>
usingjson=nlohmann::json;
// a simple event consumer that collects string representations of the passed
// values; note inheriting from json::json_sax_t is not required, but can
// help not to forget a required function
classsax_event_consumer:publicjson::json_sax_t
{
public:
std::vector<std::string>events;
boolnull()override
{
events.push_back("null()");
returntrue;
}
boolboolean(boolval)override
{
events.push_back("boolean(val="+std::string(val?"true":"false")+")");
returntrue;
}
boolnumber_integer(number_integer_tval)override
{
events.push_back("number_integer(val="+std::to_string(val)+")");
returntrue;
}
boolnumber_unsigned(number_unsigned_tval)override
{
events.push_back("number_unsigned(val="+std::to_string(val)+")");
returntrue;
}
boolnumber_float(number_float_tval,conststring_t&s)override
{
events.push_back("number_float(val="+std::to_string(val)+", s="+s+")");
returntrue;
}
boolstring(string_t&val)override
{
events.push_back("string(val="+val+")");
returntrue;
}
boolstart_object(std::size_telements)override
{
events.push_back("start_object(elements="+std::to_string(elements)+")");
returntrue;
}
boolend_object()override
{
events.push_back("end_object()");
returntrue;
}
boolstart_array(std::size_telements)override
{
events.push_back("start_array(elements="+std::to_string(elements)+")");
returntrue;
}
boolend_array()override
{
events.push_back("end_array()");
returntrue;
}
boolkey(string_t&val)override
{
events.push_back("key(val="+val+")");
returntrue;
}
boolbinary(json::binary_t&val)override
{
events.push_back("binary(val=[...])");
returntrue;
}
boolparse_error(std::size_tposition,conststd::string&last_token,constjson::exception&ex)override
{
events.push_back("parse_error(position="+std::to_string(position)+", last_token="+last_token+",\n ex="+std::string(ex.what())+")");
returnfalse;
}
};
intmain()
{
// a JSON text
autotext=R"(
 {
 "Image": {
 "Width": 800,
 "Height": 600,
 "Title": "View from 15th Floor",
 "Thumbnail": {
 "Url": "http://www.example.com/image/481989943",
 "Height": 125,
 "Width": 100
 },
 "Animated" : false,
 "IDs": [116, 943, 234, -38793],
 "DeletionDate": null,
 "Distance": 12.723374634
 }
 }]
)";
// create a SAX event consumer object
sax_event_consumersec;
// parse JSON
boolresult=json::sax_parse(text,&sec);
// output the recorded events
for(auto&event:sec.events)
{
std::cout<<event<<"\n";
}
// output the result of sax_parse
std::cout<<"\nresult: "<<std::boolalpha<<result<<std::endl;
}

Output:

start_object(elements=18446744073709551615)
key(val=Image)
start_object(elements=18446744073709551615)
key(val=Width)
number_unsigned(val=800)
key(val=Height)
number_unsigned(val=600)
key(val=Title)
string(val=Viewfrom15thFloor)
key(val=Thumbnail)
start_object(elements=18446744073709551615)
key(val=Url)
string(val=http://www.example.com/image/481989943)
key(val=Height)
number_unsigned(val=125)
key(val=Width)
number_unsigned(val=100)
end_object()
key(val=Animated)
boolean(val=false)
key(val=IDs)
start_array(elements=18446744073709551615)
number_unsigned(val=116)
number_unsigned(val=943)
number_unsigned(val=234)
number_integer(val=-38793)
end_array()
key(val=DeletionDate)
null()
key(val=Distance)
number_float(val=12.723375,s=12.723374634)
end_object()
end_object()
parse_error(position=460,last_token=12.723374634<U+000A>}<U+000A>}],
ex=[json.exception.parse_error.101]parseerroratline17,column6:syntaxerrorwhileparsingvalue-unexpected']';expectedendofinput)
result:false

Version history

  • Added in version 3.2.0.

AltStyle によって変換されたページ (->オリジナル) /