Skip to content

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.

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