JSON
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.NumberFloating_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 wvaluecan 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 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 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. To sort keys lexicographically, add #define CROW_JSON_USE_MAP before including a Crow header.
To preserve the order in which new keys are inserted, add #define CROW_JSON_USE_INSERTION_ORDER before including a Crow header. Updating an existing key does not change its position. These settings affect json::wvalue and its serialized output. The two macros cannot be used together.
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 #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).