Skip to content

# basic_json::unflatten

    basic_json unflatten() const;

The function restores the arbitrary nesting of a JSON value that has been flattened before using the `flatten()` function. The JSON value must meet certain constraints:

1. The value must be an object.
2. The keys must be JSON pointers (see RFC 6901)
3. The mapped values must be primitive JSON types.

## Return value

the original JSON from a flattened version

## Exceptions

The function can throw the following exceptions:

- Throws `type_error.314` if value is not an object
- Throws `type_error.315` if object values are not primitive

## Exception safety

Strong exception safety: if an exception occurs, the original value stays intact.

## Complexity

Linear in the size the JSON value.

## Notes

Empty objects and arrays are flattened by `flatten()` to `null` values and can not unflattened to their original type. Apart from this example, for a JSON value `j`, the following is always true: `j == j.flatten().unflatten()`.

## Example

Example

The following code shows how a flattened JSON object is unflattened into the original nested JSON object.

    #include <iostream>
    #include <iomanip>
    #include <nlohmann/json.hpp>

    using json = nlohmann::json;

    int main()
    {
        // create JSON value
        json j_flattened =
        {
            {"/answer/everything", 42},
            {"/happy", true},
            {"/list/0", 1},
            {"/list/1", 0},
            {"/list/2", 2},
            {"/name", "Niels"},
            {"/nothing", nullptr},
            {"/object/currency", "USD"},
            {"/object/value", 42.99},
            {"/pi", 3.141}
        };

        // call unflatten()
        std::cout << std::setw(4) << j_flattened.unflatten() << '\n';
    }

Output:

    {
        "answer": {
            "everything": 42
        },
        "happy": true,
        "list": [
            1,
            0,
            2
        ],
        "name": "Niels",
        "nothing": null,
        "object": {
            "currency": "USD",
            "value": 42.99
        },
        "pi": 3.141
    }

## Version history

- Added in version 2.0.0.