* Add implementation to retrieve start and end positions of json during parse * Add more unit tests and add start/stop parsing for arrays * Add raw value for all types * Add more tests and fix compiler warning * Amalgamate * Fix CLang GCC warnings * Fix error in build * Style using astyle 3.1 * Fix whitespace changes * revert * more whitespace reverts * Address PR comments * Fix failing issues * More whitespace reverts * Address remaining PR comments * Address comments * Switch to using custom base class instead of default basic_json * Adding a basic using for a json using the new base class. Also address PR comments and fix CI failures * Address decltype comments * Diagnostic positions macro (#4) Co-authored-by: Sush Shringarputale <sushring@linux.microsoft.com> * Fix missed include deletion * Add docs and address other PR comments (#5) * Add docs and address other PR comments --------- Co-authored-by: Sush Shringarputale <sushring@linux.microsoft.com> * Address new PR comments and fix CI tests for documentation * Update documentation based on feedback (#6) --------- Co-authored-by: Sush Shringarputale <sushring@linux.microsoft.com> * Address std::size_t and other comments * Fix new CI issues * Fix lcov * Improve lcov case with update to handle_diagnostic_positions call for discarded values * Fix indentation of LCOV_EXCL_STOP comments * fix amalgamation astyle issue --------- Co-authored-by: Sush Shringarputale <sushring@linux.microsoft.com>
52 lines
2.2 KiB
C++
52 lines
2.2 KiB
C++
#include <iostream>
|
|
|
|
#define JSON_DIAGNOSTIC_POSITIONS 1
|
|
#include <nlohmann/json.hpp>
|
|
|
|
using json = nlohmann::json;
|
|
|
|
int main()
|
|
{
|
|
std::string json_string = R"(
|
|
{
|
|
"address": {
|
|
"street": "Fake Street",
|
|
"housenumber": 1
|
|
}
|
|
}
|
|
)";
|
|
json j = json::parse(json_string);
|
|
|
|
std::cout << "Root diagnostic positions: \n";
|
|
std::cout << "\tstart_pos: " << j.start_pos() << '\n';
|
|
std::cout << "\tend_pos:" << j.end_pos() << "\n";
|
|
std::cout << "Original string: \n";
|
|
std::cout << "{\n \"address\": {\n \"street\": \"Fake Street\",\n \"housenumber\": 1\n }\n }" << "\n";
|
|
std::cout << "Parsed string: \n";
|
|
std::cout << json_string.substr(j.start_pos(), j.end_pos() - j.start_pos()) << "\n\n";
|
|
|
|
std::cout << "address diagnostic positions: \n";
|
|
std::cout << "\tstart_pos:" << j["address"].start_pos() << '\n';
|
|
std::cout << "\tend_pos:" << j["address"].end_pos() << "\n\n";
|
|
std::cout << "Original string: \n";
|
|
std::cout << "{ \"street\": \"Fake Street\",\n \"housenumber\": 1\n }" << "\n";
|
|
std::cout << "Parsed string: \n";
|
|
std::cout << json_string.substr(j["address"].start_pos(), j["address"].end_pos() - j["address"].start_pos()) << "\n\n";
|
|
|
|
std::cout << "street diagnostic positions: \n";
|
|
std::cout << "\tstart_pos:" << j["address"]["street"].start_pos() << '\n';
|
|
std::cout << "\tend_pos:" << j["address"]["street"].end_pos() << "\n\n";
|
|
std::cout << "Original string: \n";
|
|
std::cout << "\"Fake Street\"" << "\n";
|
|
std::cout << "Parsed string: \n";
|
|
std::cout << json_string.substr(j["address"]["street"].start_pos(), j["address"]["street"].end_pos() - j["address"]["street"].start_pos()) << "\n\n";
|
|
|
|
std::cout << "housenumber diagnostic positions: \n";
|
|
std::cout << "\tstart_pos:" << j["address"]["housenumber"].start_pos() << '\n';
|
|
std::cout << "\tend_pos:" << j["address"]["housenumber"].end_pos() << "\n\n";
|
|
std::cout << "Original string: \n";
|
|
std::cout << "1" << "\n";
|
|
std::cout << "Parsed string: \n";
|
|
std::cout << json_string.substr(j["address"]["housenumber"].start_pos(), j["address"]["housenumber"].end_pos() - j["address"]["housenumber"].start_pos()) << "\n\n";
|
|
}
|