1#include <iostream>
2#include <iomanip>
3#include <sstream>
4#include <nlohmann/json.hpp>
5
6using json = nlohmann::json;
7
8int main()
9{
10    // a JSON text
11    auto text = R"(
12    {
13        "Image": {
14            "Width":  800,
15            "Height": 600,
16            "Title":  "View from 15th Floor",
17            "Thumbnail": {
18                "Url":    "http://www.example.com/image/481989943",
19                "Height": 125,
20                "Width":  100
21            },
22            "Animated" : false,
23            "IDs": [116, 943, 234, 38793]
24        }
25    }
26    )";
27
28    // fill a stream with JSON text
29    std::stringstream ss;
30    ss << text;
31
32    // parse and serialize JSON
33    json j_complete = json::parse(ss);
34    std::cout << std::setw(4) << j_complete << "\n\n";
35
36
37    // define parser callback
38    json::parser_callback_t cb = [](int depth, json::parse_event_t event, json & parsed)
39    {
40        // skip object elements with key "Thumbnail"
41        if (event == json::parse_event_t::key and parsed == json("Thumbnail"))
42        {
43            return false;
44        }
45        else
46        {
47            return true;
48        }
49    };
50
51    // fill a stream with JSON text
52    ss.clear();
53    ss << text;
54
55    // parse (with callback) and serialize JSON
56    json j_filtered = json::parse(ss, cb);
57    std::cout << std::setw(4) << j_filtered << '\n';
58}