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:
the original JSON from a flattened version
Strong exception safety: if an exception occurs, the original value stays intact.
The function can throw the following exceptions:
type_error.314 if value is not an objecttype_error.315 if object values are not primitivetype_error.313 if a key (JSON pointer) leads to a conflicting nesting; example: "invalid value to unflatten"parse_error.109 if an array index in a key is not a number; example: "array index 'one' is not a number"Linear in the size of the JSON value.
Empty objects and arrays are flattened by flatten() to null values and cannot unflattened to their original type. Apart from this example, for a JSON value j, the following is always true: j == j.flatten().unflatten().
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
}