# Reference ## Types and default values | JSON type | value_type | C++ type | type alias | default value | | ----------------------- | -------------------------- | ----------------------------- | ---------------------- | -------------- | null | `value_type::null` | `nullptr_t` | - | `nullptr` | | string | `value_type::string` | `std::string` | `JSON::string_t` | `""` | | number (integer) | `value_type::number` | `int` | `JSON::number_t` | `0` | | number (floating point) | `value_type::number_float` | `double` | `JSON::number_float_t` | `0.0` | | array | `value_type::array ` | `std::array` | `JSON::array_t` | `{}` | | object | `value_type::object` | `std::map` | `JSON::object_t` | `{}` | ## Type conversions There are only a few type conversions possible: - An integer number can be translated to a floating point number. - A floating point number can be translated to an integer number. Note the number is truncated and not rounded, ceiled or floored. - Any value (i.e., boolean, string, number, null) but JSON objects can be translated into an array. The result is a singleton array that consists of the value before. - Any other conversion will throw a `std::logic_error` exception. When compatible, `JSON` values **implicitly convert** to `std::string`, `int`, `double`, `JSON::array_t`, and `JSON::object_t`. Furthermore, **explicit type conversion** is possible using the `get<>()` function with the aforementioned types. ## Initialization JSON values can be created from many literals and variable types: | JSON type | literal/variable types | examples | | --------- | ---------------------- | -------- | | none | null pointer literal, `nullptr_t` type, no value | `nullptr` | | boolean | boolean literals, `bool` type, `JSON::boolean_t` type | `true`, `false` | | string | string literal, `char*` type, `std::string` type, `std::string&&` rvalue reference, `JSON::string_t` type | `"Hello"` | | number (integer) | integer literal, `short int` type, `int` type, `JSON_number_t` type | `42` | | number (floating point) | floating point literal, `float` type, `double` type, `JSON::number_float_t` type | `3.141529` | array | initializer list whose elements are `JSON` values (or can be translated into `JSON` values using the rules above), `std::vector` type, `JSON::array_t` type, `JSON::array_t&&` rvalue reference | `{1, 2, 3, true, "foo"}` | | object | initializer list whose elements are pairs of a string literal and a `JSON` value (or can be translated into `JSON` values using the rules above), `std::map` type, `JSON::object_t` type, `JSON::object_t&&` rvalue reference | `{ {"key1", 42}, {"key2", false} }` |