TerraForge3D  2.3.1
3D Terrain And Landscape Generator

◆ from_cbor() [4/4]

template<template< typename U, typename V, typename... Args > class ObjectType = std::map, template< typename U, typename... Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = std::int64_t, class NumberUnsignedType = std::uint64_t, class NumberFloatType = double, template< typename U > class AllocatorType = std::allocator, template< typename T, typename SFINAE=void > class JSONSerializer = adl_serializer, class BinaryType = std::vector<std::uint8_t>>
template<typename IteratorType >
static JSON_HEDLEY_WARN_UNUSED_RESULT basic_json nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer, BinaryType >::from_cbor ( IteratorType  first,
IteratorType  last,
const bool  strict = true,
const bool  allow_exceptions = true,
const cbor_tag_handler_t  tag_handler = cbor_tag_handler_t::error 
)
inlinestatic

create a JSON value from an input in CBOR format

Deserializes a given input i to a JSON value using the CBOR (Concise Binary Object Representation) serialization format.

The library maps CBOR types to JSON value types as follows:

CBOR type JSON value type first byte
Integer number_unsigned 0x00..0x17
Unsigned integer number_unsigned 0x18
Unsigned integer number_unsigned 0x19
Unsigned integer number_unsigned 0x1A
Unsigned integer number_unsigned 0x1B
Negative integer number_integer 0x20..0x37
Negative integer number_integer 0x38
Negative integer number_integer 0x39
Negative integer number_integer 0x3A
Negative integer number_integer 0x3B
Byte string binary 0x40..0x57
Byte string binary 0x58
Byte string binary 0x59
Byte string binary 0x5A
Byte string binary 0x5B
UTF-8 string string 0x60..0x77
UTF-8 string string 0x78
UTF-8 string string 0x79
UTF-8 string string 0x7A
UTF-8 string string 0x7B
UTF-8 string string 0x7F
array array 0x80..0x97
array array 0x98
array array 0x99
array array 0x9A
array array 0x9B
array array 0x9F
map object 0xA0..0xB7
map object 0xB8
map object 0xB9
map object 0xBA
map object 0xBB
map object 0xBF
False false 0xF4
True true 0xF5
Null null 0xF6
Half-Precision Float number_float 0xF9
Single-Precision Float number_float 0xFA
Double-Precision Float number_float 0xFB
Warning
The mapping is incomplete in the sense that not all CBOR types can be converted to a JSON value. The following CBOR types are not supported and will yield parse errors (parse_error.112):
  • date/time (0xC0..0xC1)
  • bignum (0xC2..0xC3)
  • decimal fraction (0xC4)
  • bigfloat (0xC5)
  • expected conversions (0xD5..0xD7)
  • simple values (0xE0..0xF3, 0xF8)
  • undefined (0xF7)
CBOR allows map keys of any type, whereas JSON only allows strings as keys in object values. Therefore, CBOR maps with keys other than UTF-8 strings are rejected (parse_error.113).
Note
Any CBOR output created to_cbor can be successfully parsed by from_cbor.
Parameters
[in]ian input in CBOR format convertible to an input adapter
[in]strictwhether to expect the input to be consumed until EOF (true by default)
[in]allow_exceptionswhether to throw exceptions in case of a parse error (optional, true by default)
[in]tag_handlerhow to treat CBOR tags (optional, error by default)
Returns
deserialized JSON value; in case of a parse error and allow_exceptions set to false, the return value will be value_t::discarded.
Exceptions
parse_error.110if the given input ends prematurely or the end of file was not reached when strict was set to true
parse_error.112if unsupported features from CBOR were used in the given input v or if the input is not valid CBOR
parse_error.113if a string was expected as map key, but not found

@complexity Linear in the size of the input i.

@liveexample{The example shows the deserialization of a byte vector in CBOR format to a JSON value.,from_cbor}

See also
http://cbor.io
see to_cbor(const basic_json&) for the analogous serialization
see from_msgpack(InputType&&, const bool, const bool) for the related MessagePack format
see from_ubjson(InputType&&, const bool, const bool) for the related UBJSON format
Since
version 2.0.9; parameter start_index since 2.1.1; changed to consume input adapters, removed start_index parameter, and added strict parameter since 3.0.0; added allow_exceptions parameter since 3.2.0; added tag_handler parameter since 3.9.0.

Definition at line 25467 of file json.hpp.

25471 {
25472 basic_json result;
25473 detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
25474 auto ia = detail::input_adapter(std::move(first), std::move(last));
25475 const bool res = binary_reader<decltype(ia)>(std::move(ia)).sax_parse(input_format_t::cbor, &sdp, strict, tag_handler);
25476 return res ? result : basic_json(value_t::discarded);
25477 }
basic_json(const value_t v)
create an empty value with a given type
Definition: json.hpp:19164
@ discarded
discarded by the parser callback function