Example: serialization_json_example
Example console output:
{ "pose" : { "datatype" : "CPose2D", "phi" : 0, "version" : 1, "x" : 5, "y" : 6 }, "pose_pdf" : { "cov" : { "data" : "[0.000000e+00 0.000000e+00 0.000000e+00 ;0.000000e+00 0.000000e+00 0.000000e+00 ;0.000000e+00 0.000000e+00 0.000000e+00 ]", "datatype" : "CMatrixD", "ncols" : 3, "nrows" : 3, "version" : 1 }, "datatype" : "CPosePDFGaussian", "mean" : { "datatype" : "CPose2D", "phi" : 1.5707963267948966, "version" : 1, "x" : 1, "y" : 2 }, "version" : 1 } } read pose:[5.000000 6.000000 0.000000deg]
C++ example source code:
/* +------------------------------------------------------------------------+ | Mobile Robot Programming Toolkit (MRPT) | | https://www.mrpt.org/ | | | | Copyright (c) 2005-2024, Individual contributors, see AUTHORS file | | See: https://www.mrpt.org/Authors - All rights reserved. | | Released under BSD License. See: https://www.mrpt.org/License | +------------------------------------------------------------------------+ */ #include <iostream> // cout #include <sstream> // stringstream #include <mrpt/poses/CPosePDFGaussian.h> #include <mrpt/serialization/CSchemeArchive.h> #include <iostream> // cout void WriteAndReadExample() { // Define the MRPT objects to be serialized: mrpt::poses::CPosePDFGaussian pdf1{ mrpt::poses::CPose2D{1.0, 2.0, mrpt::DEG2RAD(90.0)}, mrpt::math::CMatrixDouble33()}; mrpt::poses::CPose2D p1{5.0, 6.0, mrpt::DEG2RAD(.0)}; // -------------------- // JSON Serialization // -------------------- // Create a JSON archive: auto arch = mrpt::serialization::archiveJSON(); // Writes the objects to the JSON archive: arch["pose_pdf"] = pdf1; arch["pose"] = p1; // Writes the JSON representation to an std::ostream std::stringstream ss; ss << arch; // also, print to cout for illustration purposes: std::cout << arch << std::endl; // -------------------- // JSON Deserialization // -------------------- // rewind stream for reading from the start ss.seekg(0); // Create a new JSON archive for reading auto arch2 = mrpt::serialization::archiveJSON(); // Load the plain text representation into the archive: ss >> arch2; // Parse the JSON data into an MRPT object: mrpt::poses::CPosePDFGaussian pdf2; arch2["pose_pdf"].readTo(pdf2); mrpt::poses::CPose2D p2; arch2["pose"].readTo(p2); std::cout << "read pose:" << p2.asString() << std::endl; } int main(int argc, char** argv) { try { WriteAndReadExample(); return 0; } catch (const std::exception& e) { std::cerr << "MRPT error: " << mrpt::exception_to_str(e) << std::endl; return -1; } catch (...) { printf("Untyped exception!"); return -1; } } #if 0 // code disabled, only present as an example for the docs: #include <json/json.h> void test() { Json::Value val; auto arch = mrpt::serialization::CSchemeArchiveBase( std::make_unique<CSchemeArchive<Json::Value>>(val)); mrpt::poses::CPose2D pt1{1.0, 2.0, 3.0}; // Store any CSerializable object into the JSON value: arch = pt1; // Alternative: // arch["pose"] = pt1; std::stringstream ss; ss << val; std::cout << val << std::endl; } #endif