需求
尝试使用 nlohmman
把复杂的类转为 json。
解决
复杂的类需要对其中的某些部分单独抽出来进行转换。
用于转换为 json 的类
struct VoltageSetConfigData {
float w1;
float p1;
float w2;
float p2;
float ref;
float pf;
};
using VoltageGetConfigData = VoltageSetConfigData;
class VoltageConfigJson {
public:
std::string name;
std::vector<VoltageGetConfigData> data;
};
数组单个元素转换
void to_json(json& j, const VoltageGetConfigData& data)
{
j = json{{"w1", data.w1}, {"p1", data.p1}, {"w2", data.w2}, {"p2", data.p2}, {"ref", data.ref}, {"pf", data.pf}};
}
void from_json(const json& j, VoltageGetConfigData& data)
{
j.at("w1").get_to(data.w1);
j.at("p1").get_to(data.p1);
j.at("w2").get_to(data.w2);
j.at("p2").get_to(data.p2);
j.at("ref").get_to(data.ref);
j.at("pf").get_to(data.pf);
}
整个类的转换
void to_json(json& j, const VoltageConfigJson& config)
{
j = json{{"config_name", config.name}};
for (auto & cfg : config.data) {
json channel;
to_json(channel, cfg);
j["config_data"].push_back(channel);
}
}
void from_json(const json& j, VoltageConfigJson& config)
{
j.at("config_name").get_to(config.name);
for (auto & cfg : j["config_data"]) {
VoltageGetConfigData data;
from_json(cfg, data);
config.data.push_back(data);
}
}
json j;
to_json(j, config_json);
VoltageConfigJson config;
from_json(j, config);