# JSON - Crow

Skip to content

Crow has built in support for JSON data.

## type

The types of values that `rvalue and wvalue` can take are as follows:

- `False`: from type `bool`.
- `True`: from type `bool`.
- `Number`
  - `Floating_point`: from type `double`.
  - `Signed_integer`: from type `int`.
  - `Unsigned_integer`: from type `unsigned int`.
- `String`: from type `std::string`.
- `List`: from type `std::vector`.
- `Object`: from type `crow::json::wvalue or crow::json::rvalue`.
  This last type means that `rvalue 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 `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.

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 `#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.