diff --git a/VirtualRobot/Util/json/converters.cpp b/VirtualRobot/Util/json/converters.cpp index c4efb34a2cece6a6d3bc82f0afc2cfa74ac0c2d9..d8f4b6cf77abd188c45c3031bb88c028328aaef6 100644 --- a/VirtualRobot/Util/json/converters.cpp +++ b/VirtualRobot/Util/json/converters.cpp @@ -1,8 +1,9 @@ +#include <boost/lexical_cast.hpp> + #include <VirtualRobot/MathTools.h> #include "converters.h" - namespace VirtualRobot::json { Eigen::Matrix4f posquat2eigen4f(const std::string& str) @@ -83,4 +84,26 @@ namespace VirtualRobot::json } return jar.dump(4); } + + std::map<std::string, float> json2NameValueMap(const std::string& str) + { + return json2NameValueMap(::nlohmann::json::parse(str)); + } + std::map<std::string, float> json2NameValueMap(const char* str) + { + return json2NameValueMap(::nlohmann::json::parse(str)); + } + std::map<std::string, float> json2NameValueMap(const nlohmann::json& j) + { + if (!j.is_object()) + { + throw std::invalid_argument{"json2NameValueMap: json has to be an object"}; + } + std::map<std::string, float> result; + for (const auto& el : j.items()) + { + result[el.key()] = boost::lexical_cast<float>(el.value()); + } + return result; + } } diff --git a/VirtualRobot/Util/json/converters.h b/VirtualRobot/Util/json/converters.h index d52c75297cdab324cc1dc97d48053af0d40e7e65..c0f0c5fb8bd261c87c3057164cc5e4764b072c61 100644 --- a/VirtualRobot/Util/json/converters.h +++ b/VirtualRobot/Util/json/converters.h @@ -1,5 +1,8 @@ #pragma once +#include <map> +#include <string> + #include <Eigen/Core> #include "json.hpp" @@ -17,4 +20,8 @@ namespace VirtualRobot::json std::string eigen4f2posquatJson(const Eigen::Matrix4f& str); std::string eigen4fVector2posquatArrayJson(const std::vector<Eigen::Matrix4f>& str); + + std::map<std::string, float> json2NameValueMap(const std::string& str); + std::map<std::string, float> json2NameValueMap(const char* str); + std::map<std::string, float> json2NameValueMap(const nlohmann::json& j); }