[/ / Distributed under the Boost Software License, Version 1.0. (See accompanying / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) /] [section Extended Examples] [section Parsing JSON] This is a conforming JSON parser. It passes all the required tests in the [@https://github.com/nst/JSONTestSuite JSON Test Suite], and all but 5 of the optional ones. Notice that the actual parsing bits are only about 150 lines of code. [extended_json_example] [endsect] [section Parsing JSON With Callbacks] This is just like the previous extended JSON parser example, except that it drops all the code that defines a JSON value, array, object, etc. It communicates events within the parse, and the value associated with each event. For instance, when a string is parsed, a callback is called that indicates this, along with the resulting `std::string`. [extended_callback_parsing_json_example] Note that here, I was keeping things simple to stay close to the previous parser. If you want to do callback parsing, you might want that because you're limited in how much memory you can allocate, or because the JSON you're parsing is really huge, and you only need to retain certain parts of it. If this is the case, one possible change that might be appealing would be to reduce the memory allocations. The only memory allocation that the parser does is the one we told it to do _emdash_ it allocates `std::strings`. If we instead used `boost::container::small_vector`, it would only ever allocate if it encountered a string larger than 1024 bytes. We would also want to change the callbacks to take `const &` parameters instead of using pass-by-value. [endsect] [endsect]