#include #include using json_document = nlohmann::json_document; using json_view = nlohmann::json_view; int main() { // a price list received from a supplier feed -- prices and account // numbers must be forwarded exactly, e.g. into an invoice const json_document doc = json_document::parse(R"( [{"sku": "A1", "price": 19.90, "account_id": 12345678901234567890123456}, {"sku": "A2", "price": 1E2, "account_id": 98765432109876543210987654}] )"); const json_view list = doc.root(); // number_format::shortest (the default) writes numbers the way // basic_json::dump() would: "19.90" becomes "19.9", "1E2" becomes // "100.0", and each account number -- far beyond any 64-bit integer -- // is rounded to the nearest double, exactly as materialize().dump() // (or a plain nlohmann::json) would round it std::cout << list.dump() << '\n'; // number_format::source copies every number exactly as it was written // in the source text instead -- something basic_json cannot do at all, // since parsing already reduces every number to its parsed value std::cout << list.dump(-1, ' ', false, json_view::number_format::source) << '\n'; }