nlohmann::json_sax::binary¶
virtualboolbinary(binary_t&val)=0;
A binary value was read.
Parameters¶
val(in)- binary value
Return value¶
Whether parsing should proceed.
Notes¶
It is safe to move the passed binary value.
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()
{
// CBOR byte string
std::vector<std::uint8_t>vec={{0x44,0xcA,0xfe,0xba,0xbe}};
// create a SAX event consumer object
sax_event_consumersec;
// parse CBOR
boolresult=json::sax_parse(vec,&sec,json::input_format_t::cbor);
// 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:
binary(val=[...])
result:true
Version history¶
- Added in version 3.8.0.