Skip to content
Snippets Groups Projects
Commit 22113dbd authored by Valerio Pastore's avatar Valerio Pastore
Browse files

removed unordered_json

parent 42cfed79
No related branches found
No related tags found
1 merge request!2removed unordered_json
......@@ -17,7 +17,7 @@ namespace inaf::oasbo::Packets {
class PacketStructureJson : public inaf::oasbo::PacketLib::BasePacketStructure {
protected:
std::vector<std::tuple<uint, std::string, uint>> convertToTupleVector(const nlohmann::ordered_json &data,
std::vector<std::tuple<uint, std::string, uint>> convertToTupleVector(const nlohmann::json &data,
uint &count);
public:
......
......@@ -17,7 +17,7 @@ std::vector<std::tuple<uint, std::string, uint>> 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<std::tuple<uint, std::string, uint>> PacketStructureJson::readStruct
}
std::vector<std::tuple<uint, std::string, uint>> PacketStructureJson::convertToTupleVector(
const nlohmann::ordered_json &data, uint &count) {
const nlohmann::json &data, uint &count) {
std::vector<std::tuple<uint, std::string, uint>> 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<std::string> keys; // Helper vectors to preserve the fields order in the file
std::vector<nlohmann::json> 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<std::tuple<uint, std::string, uint>> subArray =
convertToTupleVector(it.value()["fields"], count);
convertToTupleVector(values[i]["fields"], count);
std::for_each(subArray.begin(), subArray.end(),
[i](std::tuple<uint, std::string, uint> &line) {
std::get < 1
......@@ -47,15 +57,15 @@ std::vector<std::tuple<uint, std::string, uint>> 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;
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment