From 22113dbd9c36c9d588ca0391e92c9bf086dae0d8 Mon Sep 17 00:00:00 2001 From: valerio Date: Fri, 21 Apr 2023 10:53:54 +0200 Subject: [PATCH] removed unordered_json --- include/PacketStructureJson.h | 2 +- src/PacketStructureJson.cpp | 36 ++++++++++++++++++++++------------- 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/include/PacketStructureJson.h b/include/PacketStructureJson.h index d6279c3..b4699b3 100644 --- a/include/PacketStructureJson.h +++ b/include/PacketStructureJson.h @@ -17,7 +17,7 @@ namespace inaf::oasbo::Packets { class PacketStructureJson : public inaf::oasbo::PacketLib::BasePacketStructure { protected: - std::vector> convertToTupleVector(const nlohmann::ordered_json &data, + std::vector> convertToTupleVector(const nlohmann::json &data, uint &count); public: diff --git a/src/PacketStructureJson.cpp b/src/PacketStructureJson.cpp index cae88f6..afd01b6 100644 --- a/src/PacketStructureJson.cpp +++ b/src/PacketStructureJson.cpp @@ -17,7 +17,7 @@ std::vector> PacketStructureJson::readStruct exit (EXIT_FAILURE); } uint count = 0; - nlohmann::ordered_json data; + nlohmann::json data; file >> data; this->structure = convertToTupleVector(data, count); file.close(); @@ -25,19 +25,29 @@ std::vector> PacketStructureJson::readStruct } std::vector> PacketStructureJson::convertToTupleVector( - const nlohmann::ordered_json &data, uint &count) { + const nlohmann::json &data, uint &count) { std::vector> out; - for (auto it = data.begin(); it != data.end(); ++it) { - if (it.value().is_object()) { - if (!it.value().count("size") || !it.value().count("fields") - || it.value().size() != 2) { - std::cerr << "Error in file: " << it.value().dump() + + std::vector keys; // Helper vectors to preserve the fields order in the file + std::vector values; + + for (auto& element : data.items()) { + keys.push_back(element.key()); + values.push_back(element.value()); + } + + + for (size_t i = 0; i < keys.size(); ++i) { + if (values[i].is_object()) { + if (!values[i].count("size") || !values[i].count("fields") + || values[i].size() != 2) { + std::cerr << "Error in file: " << values[i].dump() << std::endl; exit (EXIT_FAILURE); } - for (uint i = 0; i < it.value()["size"]; i++) { + for (uint i = 0; i < values[i]["size"]; i++) { std::vector> subArray = - convertToTupleVector(it.value()["fields"], count); + convertToTupleVector(values[i]["fields"], count); std::for_each(subArray.begin(), subArray.end(), [i](std::tuple &line) { std::get < 1 @@ -47,15 +57,15 @@ std::vector> PacketStructureJson::convertToT out.insert(out.end(), subArray.begin(), subArray.end()); } } else { - if (!it.value().is_number_integer()) { - std::cerr << "Error in value, not an int: " << it.value().dump() + if (!values[i].is_number_integer()) { + std::cerr << "Error in value, not an int: " << values[i].dump() << std::endl; exit (EXIT_FAILURE); } - std::string fieldName(it.key()); + std::string fieldName(keys[i]); std::transform(fieldName.begin(), fieldName.end(), fieldName.begin(), ::tolower); - out.push_back(std::make_tuple(count, fieldName, it.value())); + out.push_back(std::make_tuple(count, fieldName, values[i])); count += 1; } } -- GitLab