simdjson 4.6.4
Ridiculously Fast JSON
Loading...
Searching...
No Matches
simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value Class Reference

An ephemeral JSON value returned during iteration. More...

#include <value.h>

Public Member Functions

simdjson_inline value () noexcept=default
 Create a new invalid value.
 
template<typename T >
simdjson_inline simdjson_result< T > get () noexcept
 Get this value as the given type.
 
template<typename T >
simdjson_warn_unused simdjson_inline error_code get (T &out) noexcept
 Get this value as the given type.
 
simdjson_inline simdjson_result< arrayget_array () noexcept
 Cast this JSON value to an array.
 
simdjson_inline simdjson_result< objectget_object () noexcept
 Cast this JSON value to an object.
 
simdjson_inline simdjson_result< uint64_t > get_uint64 () noexcept
 Cast this JSON value to an unsigned integer.
 
simdjson_inline simdjson_result< uint64_t > get_uint64_in_string () noexcept
 Cast this JSON value (inside string) to a unsigned integer.
 
simdjson_inline simdjson_result< int64_t > get_int64 () noexcept
 Cast this JSON value to a signed integer.
 
simdjson_inline simdjson_result< int64_t > get_int64_in_string () noexcept
 Cast this JSON value (inside string) to a signed integer.
 
simdjson_inline simdjson_result< uint32_t > get_uint32 () noexcept
 Cast this JSON value to a 32-bit unsigned integer.
 
simdjson_inline simdjson_result< int32_t > get_int32 () noexcept
 Cast this JSON value to a 32-bit signed integer.
 
simdjson_inline simdjson_result< double > get_double () noexcept
 Cast this JSON value to a double.
 
simdjson_inline simdjson_result< double > get_double_in_string () noexcept
 Cast this JSON value (inside string) to a double.
 
simdjson_inline simdjson_result< std::string_view > get_string (bool allow_replacement=false) noexcept
 Cast this JSON value to a string.
 
template<typename string_type >
simdjson_warn_unused simdjson_inline error_code get_string (string_type &receiver, bool allow_replacement=false) noexcept
 Attempts to fill the provided std::string reference with the parsed value of the current string.
 
simdjson_inline simdjson_result< std::string_view > get_wobbly_string () noexcept
 Cast this JSON value to a "wobbly" string.
 
simdjson_inline simdjson_result< raw_json_stringget_raw_json_string () noexcept
 Cast this JSON value to a raw_json_string.
 
simdjson_inline simdjson_result< bool > get_bool () noexcept
 Cast this JSON value to a bool.
 
simdjson_inline simdjson_result< bool > is_null () noexcept
 Checks if this JSON value is null.
 
template<class T >
simdjson_inline operator T () noexcept(false)
 Cast this JSON value to an instance of type T.
 
simdjson_inline operator array () noexcept(false)
 Cast this JSON value to an array.
 
simdjson_inline operator object () noexcept(false)
 Cast this JSON value to an object.
 
simdjson_inline operator uint64_t () noexcept(false)
 Cast this JSON value to an unsigned integer.
 
simdjson_inline operator int64_t () noexcept(false)
 Cast this JSON value to a signed integer.
 
simdjson_inline operator double () noexcept(false)
 Cast this JSON value to a double.
 
simdjson_inline operator std::string_view () noexcept(false)
 Cast this JSON value to a string.
 
simdjson_inline operator raw_json_string () noexcept(false)
 Cast this JSON value to a raw_json_string.
 
simdjson_inline operator bool () noexcept(false)
 Cast this JSON value to a bool.
 
simdjson_inline simdjson_result< array_iteratorbegin () &noexcept
 Begin array iteration.
 
simdjson_inline simdjson_result< array_iteratorend () &noexcept
 Sentinel representing the end of the array.
 
simdjson_inline simdjson_result< size_t > count_elements () &noexcept
 This method scans the array and counts the number of elements.
 
simdjson_inline simdjson_result< size_t > count_fields () &noexcept
 This method scans the object and counts the number of key-value pairs.
 
simdjson_inline simdjson_result< valueat (size_t index) noexcept
 Get the value at the given index in the array.
 
simdjson_inline simdjson_result< valuefind_field (std::string_view key) noexcept
 Look up a field by name on an object (order-sensitive).
 
simdjson_inline simdjson_result< valuefind_field (const char *key) noexcept
 
simdjson_inline simdjson_result< valuefind_field_unordered (std::string_view key) noexcept
 Look up a field by name on an object, without regard to key order.
 
simdjson_inline simdjson_result< valuefind_field_unordered (const char *key) noexcept
 
simdjson_inline simdjson_result< valueoperator[] (std::string_view key) noexcept
 
simdjson_inline simdjson_result< valueoperator[] (const char *key) noexcept
 
simdjson_result< valueoperator[] (int) noexcept=delete
 
simdjson_inline simdjson_result< json_typetype () noexcept
 Get the type of this JSON value.
 
simdjson_inline simdjson_result< bool > is_scalar () noexcept
 Checks whether the value is a scalar (string, number, null, Boolean).
 
simdjson_inline simdjson_result< bool > is_string () noexcept
 Checks whether the value is a string.
 
simdjson_inline bool is_negative () noexcept
 Checks whether the value is a negative number.
 
simdjson_inline simdjson_result< bool > is_integer () noexcept
 Checks whether the value is an integer number.
 
simdjson_inline simdjson_result< number_typeget_number_type () noexcept
 Determine the number type (integer or floating-point number) as quickly as possible.
 
simdjson_warn_unused simdjson_inline simdjson_result< numberget_number () noexcept
 Attempt to parse an ondemand::number.
 
simdjson_inline std::string_view raw_json_token () noexcept
 Get the raw JSON for this token.
 
simdjson_inline simdjson_result< std::string_view > raw_json () noexcept
 Get a string_view pointing at this value in the JSON document.
 
simdjson_inline simdjson_result< const char * > current_location () noexcept
 Returns the current location in the document if in bounds.
 
simdjson_inline int32_t current_depth () const noexcept
 Returns the current depth in the document if in bounds.
 
simdjson_inline simdjson_result< valueat_pointer (std::string_view json_pointer) noexcept
 Get the value associated with the given JSON pointer.
 
simdjson_inline simdjson_result< valueat_path (std::string_view at_path) noexcept
 Get the value associated with the given JSONPath expression.
 
template<typename Func >
simdjson_inline error_code for_each_at_path_with_wildcard (std::string_view json_path, Func &&callback) noexcept
 Call the provided callback for each value matching the given JSONPath expression with wildcard support.
 
template<>
simdjson_inline simdjson_result< arrayget () noexcept
 
template<>
simdjson_inline simdjson_result< objectget () noexcept
 
template<>
simdjson_inline simdjson_result< raw_json_stringget () noexcept
 
template<>
simdjson_inline simdjson_result< std::string_view > get () noexcept
 
template<>
simdjson_inline simdjson_result< numberget () noexcept
 
template<>
simdjson_inline simdjson_result< double > get () noexcept
 
template<>
simdjson_inline simdjson_result< uint64_t > get () noexcept
 
template<>
simdjson_inline simdjson_result< int64_t > get () noexcept
 
template<>
simdjson_inline simdjson_result< uint32_t > get () noexcept
 
template<>
simdjson_inline simdjson_result< int32_t > get () noexcept
 
template<>
simdjson_inline simdjson_result< bool > get () noexcept
 
template<>
simdjson_warn_unused simdjson_inline error_code get (array &out) noexcept
 
template<>
simdjson_warn_unused simdjson_inline error_code get (object &out) noexcept
 
template<>
simdjson_warn_unused simdjson_inline error_code get (raw_json_string &out) noexcept
 
template<>
simdjson_warn_unused simdjson_inline error_code get (std::string_view &out) noexcept
 
template<>
simdjson_warn_unused simdjson_inline error_code get (number &out) noexcept
 
template<>
simdjson_warn_unused simdjson_inline error_code get (double &out) noexcept
 
template<>
simdjson_warn_unused simdjson_inline error_code get (uint64_t &out) noexcept
 
template<>
simdjson_warn_unused simdjson_inline error_code get (int64_t &out) noexcept
 
template<>
simdjson_warn_unused simdjson_inline error_code get (uint32_t &out) noexcept
 
template<>
simdjson_warn_unused simdjson_inline error_code get (int32_t &out) noexcept
 
template<>
simdjson_warn_unused simdjson_inline error_code get (bool &out) noexcept
 
template<typename Func >
error_code for_each_at_path_with_wildcard (std::string_view json_path, Func &&callback) noexcept
 

Protected Member Functions

simdjson_inline value (const value_iterator &iter) noexcept
 Create a value.
 
simdjson_inline void skip () noexcept
 Skip this value, allowing iteration to continue.
 
simdjson_inline simdjson_result< objectstart_or_resume_object () noexcept
 Get the object, starting or resuming it as necessary.
 

Static Protected Member Functions

static simdjson_inline value start (const value_iterator &iter) noexcept
 Start a value at the current position.
 
static simdjson_inline value resume (const value_iterator &iter) noexcept
 Resume a value.
 

Protected Attributes

value_iterator iter {}
 

Detailed Description

An ephemeral JSON value returned during iteration.

It is only valid for as long as you do not access more data in the JSON document.

Definition at line 22 of file value.h.

Constructor & Destructor Documentation

◆ value() [1/2]

simdjson_inline simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::value ( )
defaultnoexcept

Create a new invalid value.

Exists so you can declare a variable and later assign to it before use.

◆ value() [2/2]

simdjson_inline simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::value ( const value_iterator &  iter)
protectednoexcept

Create a value.

Definition at line 21 of file value-inl.h.

Member Function Documentation

◆ at()

simdjson_inline simdjson_result< value > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::at ( size_t  index)
noexcept

Get the value at the given index in the array.

This function has linear-time complexity. This function should only be called once on an array instance since the array iterator is not reset between each call.

Returns
The value at the given index, or:
  • INDEX_OUT_OF_BOUNDS if the array index is larger than an array length

Definition at line 175 of file value-inl.h.

◆ at_path()

simdjson_inline simdjson_result< value > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::at_path ( std::string_view  at_path)
noexcept

Get the value associated with the given JSONPath expression.

We only support JSONPath queries that trivially convertible to JSON Pointer queries: key names and array indices.

Returns
The value associated with the given JSONPath expression, or:
  • INVALID_JSON_POINTER if the JSONPath to JSON Pointer conversion fails
  • NO_SUCH_FIELD if a field does not exist in an object
  • INDEX_OUT_OF_BOUNDS if an array index is larger than an array length
  • INCORRECT_TYPE if a non-integer is used to access an array

Definition at line 304 of file value-inl.h.

◆ at_pointer()

simdjson_inline simdjson_result< value > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::at_pointer ( std::string_view  json_pointer)
noexcept

Get the value associated with the given JSON pointer.

We use the RFC 6901 https://tools.ietf.org/html/rfc6901 standard.

ondemand::parser parser; auto json = R"({ "foo": { "a": [ 10, 20, 30 ] }})"_padded; auto doc = parser.iterate(json); doc.at_pointer("/foo/a/1") == 20

It is allowed for a key to be the empty string:

ondemand::parser parser; auto json = R"({ "": { "a": [ 10, 20, 30 ] }})"_padded; auto doc = parser.iterate(json); doc.at_pointer("//a/1") == 20

Note that at_pointer() called on the document automatically calls the document's rewind method between each call. It invalidates all previously accessed arrays, objects and values that have not been consumed.

Calling at_pointer() on non-document instances (e.g., arrays and objects) is not standardized (by RFC 6901). We provide some experimental support for JSON pointers on non-document instances. Yet it is not the case when calling at_pointer on an array or an object instance: there is no rewind and no invalidation.

You may only call at_pointer on an array after it has been created, but before it has been first accessed. When calling at_pointer on an array, the pointer is advanced to the location indicated by the JSON pointer (in case of success). It is no longer possible to call at_pointer on the same array.

You may call at_pointer more than once on an object, but each time the pointer is advanced to be within the value matched by the key indicated by the JSON pointer query. Thus any preceding key (as well as the current key) can no longer be used with following JSON pointer calls.

Also note that at_pointer() relies on find_field() which implies that we do not unescape keys when matching

Returns
The value associated with the given JSON pointer, or:
  • NO_SUCH_FIELD if a field does not exist in an object
  • INDEX_OUT_OF_BOUNDS if an array index is larger than an array length
  • INCORRECT_TYPE if a non-integer is used to access an array
  • INVALID_JSON_POINTER if the JSON pointer is invalid and cannot be parsed

Definition at line 286 of file value-inl.h.

◆ begin()

simdjson_inline simdjson_result< array_iterator > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::begin ( ) &
noexcept

Begin array iteration.

Part of the std::iterable interface.

Returns
INCORRECT_TYPE If the JSON value is not an array.

Definition at line 152 of file value-inl.h.

◆ count_elements()

simdjson_inline simdjson_result< size_t > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::count_elements ( ) &
noexcept

This method scans the array and counts the number of elements.

The count_elements method should always be called before you have begun iterating through the array: it is expected that you are pointing at the beginning of the array. The runtime complexity is linear in the size of the array. After calling this function, if successful, the array is 'rewinded' at its beginning as if it had never been accessed. If the JSON is malformed (e.g., there is a missing comma), then an error is returned and it is no longer safe to continue.

Performance hint: You should only call count_elements() as a last resort as it may require scanning the document twice or more.

Definition at line 158 of file value-inl.h.

◆ count_fields()

simdjson_inline simdjson_result< size_t > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::count_fields ( ) &
noexcept

This method scans the object and counts the number of key-value pairs.

The count_fields method should always be called before you have begun iterating through the object: it is expected that you are pointing at the beginning of the object. The runtime complexity is linear in the size of the object. After calling this function, if successful, the object is 'rewinded' at its beginning as if it had never been accessed. If the JSON is malformed (e.g., there is a missing comma), then an error is returned and it is no longer safe to continue.

To check that an object is empty, it is more performant to use the is_empty() method on the object instance.

Performance hint: You should only call count_fields() as a last resort as it may require scanning the document twice or more.

Definition at line 168 of file value-inl.h.

◆ current_depth()

simdjson_inline int32_t simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::current_depth ( ) const
noexcept

Returns the current depth in the document if in bounds.

E.g., 0 = finished with document 1 = document root value (could be [ or {, not yet known) 2 = , or } inside root array/object 3 = key or value inside root array/object.

Definition at line 262 of file value-inl.h.

◆ current_location()

simdjson_inline simdjson_result< const char * > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::current_location ( )
noexcept

Returns the current location in the document if in bounds.

Definition at line 258 of file value-inl.h.

◆ end()

simdjson_inline simdjson_result< array_iterator > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::end ( ) &
noexcept

Sentinel representing the end of the array.

Part of the std::iterable interface.

Definition at line 155 of file value-inl.h.

◆ find_field() [1/2]

simdjson_inline simdjson_result< value > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::find_field ( const char *  key)
noexcept

Definition at line 183 of file value-inl.h.

◆ find_field() [2/2]

simdjson_inline simdjson_result< value > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::find_field ( std::string_view  key)
noexcept

Look up a field by name on an object (order-sensitive).

By order-sensitive, we mean that fields must be accessed in the order they appear in the JSON text (although you can skip fields). See find_field_unordered() and operator[] for an order-insensitive version.

The following code reads z, then y, then x, and thus will not retrieve x or y if fed the JSON { "x": 1, "y": 2, "z": 3 }:

simdjson::ondemand::parser parser;
auto obj = parser.parse(R"( { "x": 1, "y": 2, "z": 3 } )"_padded);
double z = obj.find_field("z");
double y = obj.find_field("y");
double x = obj.find_field("x");

If you have multiple fields with a matching key ({"x": 1, "x": 1}) be mindful that only one field is returned.

Raw Keys: The lookup will be done against the raw key, and will not unescape keys. e.g. object["a"] will match { "a": 1 }, but will not match { "\u0061": 1 }.

Parameters
keyThe key to look up.
Returns
The value of the field, or NO_SUCH_FIELD if the field is not in the object.

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Definition at line 180 of file value-inl.h.

◆ find_field_unordered() [1/2]

simdjson_inline simdjson_result< value > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::find_field_unordered ( const char *  key)
noexcept

Definition at line 190 of file value-inl.h.

◆ find_field_unordered() [2/2]

simdjson_inline simdjson_result< value > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::find_field_unordered ( std::string_view  key)
noexcept

Look up a field by name on an object, without regard to key order.

Performance Notes: This is a bit less performant than find_field(), though its effect varies and often appears negligible. It starts out normally, starting out at the last field; but if the field is not found, it scans from the beginning of the object to see if it missed it. That missing case has a non-cache-friendly bump and lots of extra scanning, especially if the object in question is large. The fact that the extra code is there also bumps the executable size.

We default operator[] on find_field_unordered() for convenience. It is the default because it would be highly surprising (and hard to debug) if the default behavior failed to look up a field just because it was in the wrong order–and many APIs assume this. Therefore, you must be explicit if you want to treat objects as out of order.

If you have multiple fields with a matching key ({"x": 1, "x": 1}) be mindful that only one field is returned.

Use find_field() if you are sure fields will be in order (or are willing to treat it as if the field as not there when they are not in order).

Parameters
keyThe key to look up.
Returns
The value of the field, or NO_SUCH_FIELD if the field is not in the object.

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Definition at line 187 of file value-inl.h.

◆ for_each_at_path_with_wildcard() [1/2]

template<typename Func >
error_code simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::for_each_at_path_with_wildcard ( std::string_view  json_path,
Func &&  callback 
)
inlinenoexcept

Definition at line 323 of file value-inl.h.

◆ for_each_at_path_with_wildcard() [2/2]

template<typename Func >
simdjson_inline error_code simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::for_each_at_path_with_wildcard ( std::string_view  json_path,
Func &&  callback 
)
noexcept

Call the provided callback for each value matching the given JSONPath expression with wildcard support.

Supports wildcard character (*) for arrays or ".*" for objects.

Parameters
json_pathJSONPath expression with wildcards
callbackFunction called for each matching value
Returns
error_code indicating success or failure

◆ get() [1/24]

template<>
simdjson_inline simdjson_result< array > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get ( )
noexcept

Definition at line 96 of file value-inl.h.

◆ get() [2/24]

template<>
simdjson_inline simdjson_result< object > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get ( )
noexcept

Definition at line 97 of file value-inl.h.

◆ get() [3/24]

template<>
simdjson_inline simdjson_result< raw_json_string > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get ( )
noexcept

Definition at line 98 of file value-inl.h.

◆ get() [4/24]

template<>
simdjson_inline simdjson_result< std::string_view > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get ( )
noexcept

Definition at line 99 of file value-inl.h.

◆ get() [5/24]

template<>
simdjson_inline simdjson_result< number > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get ( )
noexcept

Definition at line 100 of file value-inl.h.

◆ get() [6/24]

template<>
simdjson_inline simdjson_result< double > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get ( )
noexcept

Definition at line 101 of file value-inl.h.

◆ get() [7/24]

template<>
simdjson_inline simdjson_result< uint64_t > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get ( )
noexcept

Definition at line 102 of file value-inl.h.

◆ get() [8/24]

template<>
simdjson_inline simdjson_result< int64_t > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get ( )
noexcept

Definition at line 103 of file value-inl.h.

◆ get() [9/24]

template<>
simdjson_inline simdjson_result< uint32_t > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get ( )
noexcept

Definition at line 104 of file value-inl.h.

◆ get() [10/24]

template<>
simdjson_inline simdjson_result< int32_t > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get ( )
noexcept

Definition at line 105 of file value-inl.h.

◆ get() [11/24]

template<>
simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get ( )
noexcept

Definition at line 106 of file value-inl.h.

◆ get() [12/24]

template<typename T >
simdjson_inline simdjson_result< T > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get ( )
inlinenoexcept

Get this value as the given type.

Supported types: object, array, raw_json_string, string_view, uint64_t, int64_t, double, bool

You may use get_double(), get_bool(), get_uint64(), get_int64(), get_object(), get_array(), get_raw_json_string(), or get_string() instead. When SIMDJSON_SUPPORTS_CONCEPTS is set, custom types are also supported.

Returns
A value of the given type, parsed from the JSON.
INCORRECT_TYPE If the JSON value is not the given type.

Definition at line 44 of file value.h.

◆ get() [13/24]

template<>
simdjson_warn_unused simdjson_inline error_code simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get ( array out)
noexcept

Definition at line 109 of file value-inl.h.

◆ get() [14/24]

template<>
simdjson_warn_unused simdjson_inline error_code simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get ( bool &  out)
noexcept

Definition at line 119 of file value-inl.h.

◆ get() [15/24]

template<>
simdjson_warn_unused simdjson_inline error_code simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get ( double &  out)
noexcept

Definition at line 114 of file value-inl.h.

◆ get() [16/24]

template<>
simdjson_warn_unused simdjson_inline error_code simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get ( int32_t &  out)
noexcept

Definition at line 118 of file value-inl.h.

◆ get() [17/24]

template<>
simdjson_warn_unused simdjson_inline error_code simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get ( int64_t &  out)
noexcept

Definition at line 116 of file value-inl.h.

◆ get() [18/24]

template<>
simdjson_warn_unused simdjson_inline error_code simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get ( number out)
noexcept

Definition at line 113 of file value-inl.h.

◆ get() [19/24]

template<>
simdjson_warn_unused simdjson_inline error_code simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get ( object out)
noexcept

Definition at line 110 of file value-inl.h.

◆ get() [20/24]

template<>
simdjson_warn_unused simdjson_inline error_code simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get ( raw_json_string out)
noexcept

Definition at line 111 of file value-inl.h.

◆ get() [21/24]

template<>
simdjson_warn_unused simdjson_inline error_code simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get ( std::string_view &  out)
noexcept

Definition at line 112 of file value-inl.h.

◆ get() [22/24]

template<typename T >
simdjson_warn_unused simdjson_inline error_code simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get ( T &  out)
inlinenoexcept

Get this value as the given type.

Supported types: object, array, raw_json_string, string_view, uint64_t, int64_t, double, bool If the macro SIMDJSON_SUPPORTS_CONCEPTS is set, then custom types are also supported.

Parameters
outThis is set to a value of the given type, parsed from the JSON. If there is an error, this may not be initialized.
Returns
INCORRECT_TYPE If the JSON value is not an object.
SUCCESS If the parse succeeded and the out parameter was set to the value.

Definition at line 69 of file value.h.

◆ get() [23/24]

template<>
simdjson_warn_unused simdjson_inline error_code simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get ( uint32_t &  out)
noexcept

Definition at line 117 of file value-inl.h.

◆ get() [24/24]

template<>
simdjson_warn_unused simdjson_inline error_code simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get ( uint64_t &  out)
noexcept

Definition at line 115 of file value-inl.h.

◆ get_array()

simdjson_inline simdjson_result< array > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_array ( )
noexcept

Cast this JSON value to an array.

Returns
An object that can be used to iterate the array.
INCORRECT_TYPE If the JSON value is not an array.

Definition at line 32 of file value-inl.h.

◆ get_bool()

simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_bool ( )
noexcept

Cast this JSON value to a bool.

Returns
A bool value.
INCORRECT_TYPE if the JSON value is not true or false.

Definition at line 89 of file value-inl.h.

◆ get_double()

simdjson_inline simdjson_result< double > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_double ( )
noexcept

Cast this JSON value to a double.

Returns
A double.
INCORRECT_TYPE If the JSON value is not a valid floating-point number.

Definition at line 59 of file value-inl.h.

◆ get_double_in_string()

simdjson_inline simdjson_result< double > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_double_in_string ( )
noexcept

Cast this JSON value (inside string) to a double.

Returns
A double.
INCORRECT_TYPE If the JSON value is not a valid floating-point number.

Definition at line 62 of file value-inl.h.

◆ get_int32()

simdjson_inline simdjson_result< int32_t > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_int32 ( )
noexcept

Cast this JSON value to a 32-bit signed integer.

Calls get_int64() and checks that the result fits in an int32_t.

Returns
A 32-bit signed integer.
INCORRECT_TYPE If the JSON value is not an integer.
NUMBER_OUT_OF_RANGE If the value does not fit in an int32_t.

Definition at line 83 of file value-inl.h.

◆ get_int64()

simdjson_inline simdjson_result< int64_t > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_int64 ( )
noexcept

Cast this JSON value to a signed integer.

Returns
A signed 64-bit integer.
INCORRECT_TYPE If the JSON value is not a 64-bit integer.

Definition at line 71 of file value-inl.h.

◆ get_int64_in_string()

simdjson_inline simdjson_result< int64_t > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_int64_in_string ( )
noexcept

Cast this JSON value (inside string) to a signed integer.

Returns
A signed 64-bit integer.
INCORRECT_TYPE If the JSON value is not a 64-bit integer.

Definition at line 74 of file value-inl.h.

◆ get_number()

simdjson_warn_unused simdjson_inline simdjson_result< number > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_number ( )
noexcept

Attempt to parse an ondemand::number.

An ondemand::number may contain an integer value or a floating-point value, the simdjson library will autodetect the type. Thus it is a dynamically typed number. Before accessing the value, you must determine the detected type.

number.get_number_type() is number_type::signed_integer if we have an integer in [-9223372036854775808,9223372036854775808) You can recover the value by calling number.get_int64() and you have that number.is_int64() is true.

number.get_number_type() is number_type::unsigned_integer if we have an integer in [9223372036854775808,18446744073709551616) You can recover the value by calling number.get_uint64() and you have that number.is_uint64() is true.

For integers that do not fit in 64 bits, the function returns BIGINT_ERROR error code.

Otherwise, number.get_number_type() has value number_type::floating_point_number and we have a binary64 number. You can recover the value by calling number.get_double() and you have that number.is_double() is true.

You must check the type before accessing the value: it is an error to call "get_int64()" when number.get_number_type() is not number_type::signed_integer and when number.is_int64() is false.

Performance note: this is designed with performance in mind. When calling 'get_number()', you scan the number string only once, determining efficiently the type and storing it in an efficient manner.

Definition at line 230 of file value-inl.h.

◆ get_number_type()

simdjson_warn_unused simdjson_inline simdjson_result< number_type > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_number_type ( )
noexcept

Determine the number type (integer or floating-point number) as quickly as possible.

This function does not fully validate the input. It is useful when you only need to classify the numbers, without parsing them.

If you are planning to retrieve the value or you need full validation, consider using the get_number() method instead: it will fully parse and validate the input, and give you access to the type: get_number().get_number_type().

get_number_type() is number_type::unsigned_integer if we have an integer greater or equal to 9223372036854775808. get_number_type() is number_type::signed_integer if we have an integer that is less than 9223372036854775808. get_number_type() is number_type::big_integer for integers that do not fit in 64 bits, in which case the digit_count is set to the length of the big integer string. Otherwise, get_number_type() has value number_type::floating_point_number.

This function requires processing the number string, but it is expected to be faster than get_number().get_number_type() because it is does not parse the number value.

Returns
the type of the number

Definition at line 227 of file value-inl.h.

◆ get_object()

simdjson_inline simdjson_result< object > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_object ( )
noexcept

Cast this JSON value to an object.

Returns
An object that can be used to look up or iterate fields.
INCORRECT_TYPE If the JSON value is not an object.

Definition at line 35 of file value-inl.h.

◆ get_raw_json_string()

simdjson_inline simdjson_result< raw_json_string > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_raw_json_string ( )
noexcept

Cast this JSON value to a raw_json_string.

The string is guaranteed to be valid UTF-8, and may have escapes in it (e.g. \ or
).

Returns
A pointer to the raw JSON for the given string.
INCORRECT_TYPE if the JSON value is not a string.

Definition at line 46 of file value-inl.h.

◆ get_string() [1/2]

simdjson_inline simdjson_result< std::string_view > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_string ( bool  allow_replacement = false)
noexcept

Cast this JSON value to a string.

The string is guaranteed to be valid UTF-8.

Equivalent to get<std::string_view>().

Important: a value should be consumed once. Calling get_string() twice on the same value is an error.

In some instances, you may want to allow replacement of invalid Unicode sequences. You may do so by passing the allow_replacement parameter as true. In the following example, the string "431924697b\udff0L\u0001Y" is not valid Unicode. By passing true to get_string, we allow the replacement of the invalid Unicode sequences with the Unicode replacement character (U+FFFD).

simdjson::ondemand::parser parser; auto json = R"({"deviceId":"431924697b\udff0L\u0001Y"})"_padded; simdjson::ondemand::document doc = parser.iterate(json); auto view = doc["deviceId"].get_string(true);

Returns
An UTF-8 string. The string is stored in the parser and will be invalidated the next time it parses a document or when it is destroyed.
INCORRECT_TYPE if the JSON value is not a string.

Definition at line 49 of file value-inl.h.

◆ get_string() [2/2]

template<typename string_type >
simdjson_warn_unused simdjson_inline error_code simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_string ( string_type &  receiver,
bool  allow_replacement = false 
)
noexcept

Attempts to fill the provided std::string reference with the parsed value of the current string.

The string is guaranteed to be valid UTF-8.

Important: a value should be consumed once. Calling get_string() twice on the same value is an error.

Performance: This method may be slower than get_string() or get_string(bool) because it may need to allocate memory. We recommend you avoid allocating an std::string unless you need to.

Returns
INCORRECT_TYPE if the JSON value is not a string. Otherwise, we return SUCCESS.

Definition at line 53 of file value-inl.h.

◆ get_uint32()

simdjson_inline simdjson_result< uint32_t > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_uint32 ( )
noexcept

Cast this JSON value to a 32-bit unsigned integer.

Calls get_uint64() and checks that the result fits in a uint32_t.

Returns
A 32-bit unsigned integer.
INCORRECT_TYPE If the JSON value is not an unsigned integer.
NUMBER_OUT_OF_RANGE If the value does not fit in a uint32_t.

Definition at line 77 of file value-inl.h.

◆ get_uint64()

simdjson_inline simdjson_result< uint64_t > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_uint64 ( )
noexcept

Cast this JSON value to an unsigned integer.

Returns
A unsigned 64-bit integer.
INCORRECT_TYPE If the JSON value is not a 64-bit unsigned integer.

Definition at line 65 of file value-inl.h.

◆ get_uint64_in_string()

simdjson_inline simdjson_result< uint64_t > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_uint64_in_string ( )
noexcept

Cast this JSON value (inside string) to a unsigned integer.

Returns
A unsigned 64-bit integer.
INCORRECT_TYPE If the JSON value is not a 64-bit unsigned integer.

Definition at line 68 of file value-inl.h.

◆ get_wobbly_string()

simdjson_inline simdjson_result< std::string_view > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::get_wobbly_string ( )
noexcept

Cast this JSON value to a "wobbly" string.

The string is may not be a valid UTF-8 string. See https://simonsapin.github.io/wtf-8/

Important: a value should be consumed once. Calling get_wobbly_string() twice on the same value is an error.

Returns
An UTF-8 string. The string is stored in the parser and will be invalidated the next time it parses a document or when it is destroyed.
INCORRECT_TYPE if the JSON value is not a string.

Definition at line 56 of file value-inl.h.

◆ is_integer()

simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::is_integer ( )
noexcept

Checks whether the value is an integer number.

Note that this requires to partially parse the number string. If the value is determined to be an integer, it may still not parse properly as an integer in subsequent steps (e.g., it might overflow).

Performance note: if you call this function systematically before parsing a number, you may have fallen for a performance anti-pattern.

Returns
true if the number if negative.

Definition at line 224 of file value-inl.h.

◆ is_negative()

simdjson_inline bool simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::is_negative ( )
noexcept

Checks whether the value is a negative number.

Returns
true if the number if negative.

Definition at line 220 of file value-inl.h.

◆ is_null()

simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::is_null ( )
noexcept

Checks if this JSON value is null.

If and only if the value is null, then it is consumed (we advance). If we find a token that begins with 'n' but is not 'null', then an error is returned.

Returns
Whether the value is null.
INCORRECT_TYPE If the JSON value begins with 'n' and is not 'null'.

Definition at line 92 of file value-inl.h.

◆ is_scalar()

simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::is_scalar ( )
noexcept

Checks whether the value is a scalar (string, number, null, Boolean).

Returns false when there it is an array or object.

Returns
true if the type is string, number, null, Boolean @error TAPE_ERROR when the JSON value is a bad token like "}" "," or "alse".

Definition at line 205 of file value-inl.h.

◆ is_string()

simdjson_inline simdjson_result< bool > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::is_string ( )
noexcept

Checks whether the value is a string.

Returns
true if the type is string @error TAPE_ERROR when the JSON value is a bad token like "}" "," or "alse".

Definition at line 212 of file value-inl.h.

◆ operator array()

simdjson_inline simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::operator array ( )

Cast this JSON value to an array.

Returns
An object that can be used to iterate the array.
Exceptions
simdjson_error(INCORRECT_TYPE)If the JSON value is not an array.

Definition at line 126 of file value-inl.h.

◆ operator bool()

simdjson_inline simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::operator bool ( )

Cast this JSON value to a bool.

Returns
A bool value.
Exceptions
simdjson_error(INCORRECT_TYPE)if the JSON value is not true or false.

Definition at line 147 of file value-inl.h.

◆ operator double()

simdjson_inline simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::operator double ( )

Cast this JSON value to a double.

Returns
A double.
Exceptions
simdjson_error(INCORRECT_TYPE)If the JSON value is not a valid floating-point number.

Definition at line 138 of file value-inl.h.

◆ operator int64_t()

simdjson_inline simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::operator int64_t ( )

Cast this JSON value to a signed integer.

Returns
A signed 64-bit integer.
Exceptions
simdjson_error(INCORRECT_TYPE)If the JSON value is not a 64-bit integer.

Definition at line 135 of file value-inl.h.

◆ operator object()

simdjson_inline simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::operator object ( )

Cast this JSON value to an object.

Returns
An object that can be used to look up or iterate fields.
Exceptions
simdjson_error(INCORRECT_TYPE)If the JSON value is not an object.

Definition at line 129 of file value-inl.h.

◆ operator raw_json_string()

simdjson_inline simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::operator raw_json_string ( )

Cast this JSON value to a raw_json_string.

The string is guaranteed to be valid UTF-8, and may have escapes in it (e.g. \ or
).

Returns
A pointer to the raw JSON for the given string.
Exceptions
simdjson_error(INCORRECT_TYPE)if the JSON value is not a string.

Definition at line 144 of file value-inl.h.

◆ operator std::string_view()

simdjson_inline simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::operator std::string_view ( )

Cast this JSON value to a string.

The string is guaranteed to be valid UTF-8.

Equivalent to get<std::string_view>().

Returns
An UTF-8 string. The string is stored in the parser and will be invalidated the next time it parses a document or when it is destroyed.
Exceptions
simdjson_error(INCORRECT_TYPE)if the JSON value is not a string.

Definition at line 141 of file value-inl.h.

◆ operator T()

template<class T >
simdjson_inline simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::operator T ( )
explicit

Cast this JSON value to an instance of type T.

The programmer is responsible for providing an implementation of get<T> for the type T, if T is not one of the types supported by the library (object, array, raw_json_string, string_view, uint64_t, etc.).

See https://github.com/simdjson/simdjson/blob/master/doc/basics.md#adding-support-for-custom-types

Returns
An instance of type T

Definition at line 123 of file value-inl.h.

◆ operator uint64_t()

simdjson_inline simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::operator uint64_t ( )

Cast this JSON value to an unsigned integer.

Returns
A signed 64-bit integer.
Exceptions
simdjson_error(INCORRECT_TYPE)If the JSON value is not a 64-bit unsigned integer.

Definition at line 132 of file value-inl.h.

◆ operator[]() [1/2]

simdjson_inline simdjson_result< value > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::operator[] ( const char *  key)
noexcept

Definition at line 197 of file value-inl.h.

◆ operator[]() [2/2]

simdjson_inline simdjson_result< value > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::operator[] ( std::string_view  key)
noexcept

Definition at line 194 of file value-inl.h.

◆ raw_json()

simdjson_inline simdjson_result< std::string_view > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::raw_json ( )
noexcept

Get a string_view pointing at this value in the JSON document.

If this element is an array or an object, it consumes the array or the object and returns a string_view instance corresponding to the array as represented in JSON. It points inside the original document. If this element is a scalar (string, number, Boolean, null), it returns what raw_json_token() would return.

Definition at line 238 of file value-inl.h.

◆ raw_json_token()

simdjson_inline std::string_view simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::raw_json_token ( )
noexcept

Get the raw JSON for this token.

The string_view will always point into the input buffer.

The string_view will start at the beginning of the token, and include the entire token as well as all spaces until the next token (or EOF). This means, for example, that a string token always begins with a " and is always terminated by the final ", possibly followed by a number of spaces.

The string_view is not null-terminated. However, if this is a scalar (string, number, boolean, or null), the character after the end of the string_view is guaranteed to be a non-space token.

Tokens include:

  • {
  • [
  • "a string (possibly with UTF-8 or backslashed characters like \\\")".
  • -1.2e-100
  • true
  • false
  • null

See also value::raw_json().

Definition at line 234 of file value-inl.h.

◆ resume()

simdjson_inline value simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::resume ( const value_iterator &  iter)
staticprotectednoexcept

Resume a value.

Definition at line 28 of file value-inl.h.

◆ start()

simdjson_inline value simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::start ( const value_iterator &  iter)
staticprotectednoexcept

Start a value at the current position.

(It should already be started; this is just a self-documentation method.)

Definition at line 25 of file value-inl.h.

◆ start_or_resume_object()

simdjson_inline simdjson_result< object > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::start_or_resume_object ( )
protectednoexcept

Get the object, starting or resuming it as necessary.

Definition at line 38 of file value-inl.h.

◆ type()

simdjson_inline simdjson_result< json_type > simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::type ( )
noexcept

Get the type of this JSON value.

It does not validate or consume the value. E.g., you must still call "is_null()" to check that a value is null even if "type()" returns json_type::null.

NOTE: If you're only expecting a value to be one type (a typical case), it's generally better to just call .get_double, .get_string, etc. and check for INCORRECT_TYPE (or just let it throw an exception).

Returns
The type of JSON value (json_type::array, json_type::object, json_type::string, json_type::number, json_type::boolean, or json_type::null). @error TAPE_ERROR when the JSON value is a bad token like "}" "," or "alse".

Definition at line 201 of file value-inl.h.

Member Data Documentation

◆ iter

value_iterator simdjson::SIMDJSON_IMPLEMENTATION::ondemand::value::iter {}
protected

Definition at line 748 of file value.h.


The documentation for this class was generated from the following files: