2.8 KiB
Crow has built in support for JSON data.
type
The types of values that rvalue and wvalue
can take are as follows:
False
: from typebool
.True
: from typebool
.Number
Floating_point
: from typedouble
.Signed_integer
: from typeint
.Unsigned_integer
: from typeunsigned int
.
String
: from typestd::string
.List
: from typestd::vector
.Object
: from typecrow::json::wvalue or crow::json::rvalue
.
This last type means thatrvalue or wvalue
can have keys.
rvalue
JSON read value, used for taking a JSON string and parsing it into crow::json
.
You can read individual items of the rvalue, but you cannot add items to it.
To do that, you need to convert it to a wvalue
, which can be done by simply writing #!cpp crow::json::wvalue wval (rval);
(assuming rval
is your rvalue
).
For more info on read values go here.
wvalue
JSON write value, used for creating, editing and converting JSON to a string.
!!! note
setting a `wvalue` to object type can be done by simply assigning a value to whatever string key you like, something like `#!cpp wval["key1"] = val1;`. Keep in mind that val1 can be any of the above types.
A wvalue
can be treated as an object or even a list (setting a value by using json[3] = 32
for example). Please note that this will remove the data in the value if it isn't of List type.
!!! warning
JSON does not allow floating point values like `NaN` or `INF`, Crow will output `null` instead of `NaN` or `INF` when converting `wvalue` to a string. (`{"Key": NaN}` becomes `{"Key": null}`)
Additionally, a wvalue
can be initialized as an object using an initializer list, an example object would be wvalue x = {{"a", 1}, {"b", 2}}
. Or as a list using wvalue x = json::wvalue::list({1, 2, 3})
, lists can include any type that wvalue
supports.
An object type wvalue
uses std::unordered_map
by default, if you want to have your returned wvalue
key value pairs be sorted (using std::map
) you can add #!cpp #define CROW_JSON_USE_MAP
to the top of your program.
A JSON wvalue
can be returned directly inside a route handler, this will cause the content-type
header to automatically be set to Application/json
and the JSON value will be converted to string and placed in the response body. For more information go to Routes.
For more info on write values go here.
!!! note
Crow's json exceptions can be disabled by using the `#!cpp #define CROW_JSON_NO_ERROR_CHECK` macro. This should increase the program speed with the drawback of having unexpected behavious when used incorrectly (e.g. by attempting to parse an invalid json object).