#include #include using json = nlohmann::json; int main() { // a JSON text with an array and a number inside an object auto text = R"({"IDs": [116, 943], "Width": 800})"; // discard the array when the parser reads its opening bracket json j_array_start = json::parse(text, [](int /*depth*/, json::parse_event_t event, json & /*parsed*/) { return event != json::parse_event_t::array_start; }); // discard the same array when the parser reads its closing bracket json j_array_end = json::parse(text, [](int /*depth*/, json::parse_event_t event, json & /*parsed*/) { return event != json::parse_event_t::array_end; }); // discard the number, but keep its key json j_value = json::parse(text, [](int /*depth*/, json::parse_event_t event, json & parsed) { return !(event == json::parse_event_t::value && parsed == json(800)); }); // discard the key of the number json j_key = json::parse(text, [](int /*depth*/, json::parse_event_t event, json & parsed) { return !(event == json::parse_event_t::key && parsed == json("Width")); }); // discard the top-level object json j_root = json::parse(text, [](int /*depth*/, json::parse_event_t event, json & /*parsed*/) { return event != json::parse_event_t::object_end; }); // in every case, the discarded value is removed together with its key std::cout << j_array_start << '\n' << j_array_end << '\n' << j_value << '\n' << j_key << '\n' << j_root << '\n'; }