结构体
创建一个能够接收 neujson Value
的构造函数,并通过重载的 operator[]
获取到对应的值。通过提供一个 toJson
函数,让结构体能够序列化成字符串:
#include <cassert>
#include <cstdio>
#include "neujson/value.h"
#include "neujson/document.h"
#include "neujson/writer.h"
#include "neujson/file_write_stream.h"
struct SerialInfo {
::std::string serial_port_;
int32_t baud_rate_;
int32_t data_bits_;
int32_t stop_bits_;
int32_t parity_;
bool flow_control_;
bool clocal_;
explicit SerialInfo(const neujson::Value &_val) {
switch (_val.GetType()) {
case neujson::NEU_OBJECT:serial_port_ = _val["serial_port"].GetString();
baud_rate_ = _val["baud_rate"].GetInt32();
data_bits_ = _val["data_bits"].GetInt32();
stop_bits_ = _val["stop_bits"].GetInt32();
parity_ = _val["parity"].GetInt32();
flow_control_ = _val["flow_control"].GetBool();
clocal_ = _val["clocal"].GetBool();
break;
default:assert(false && "bad type");
break;
}
}
[[nodiscard]] neujson::Value toJsonObject() const {
neujson::Value value(neujson::NEU_OBJECT);
value.AddMember("serial_port", serial_port_);
value.AddMember("baud_rate", baud_rate_);
value.AddMember("data_bits", data_bits_);
value.AddMember("stop_bits", stop_bits_);
value.AddMember("parity", parity_);
value.AddMember("flow_control", flow_control_);
value.AddMember("clocal", clocal_);
return value;
}
};
int main() {
neujson::Value value(neujson::NEU_OBJECT);
value.AddMember("serial_port", "/dev/cu.usbserial-AB0JHQVJ");
value.AddMember("baud_rate", 115200);
value.AddMember("data_bits", 8);
value.AddMember("stop_bits", 1);
value.AddMember("parity", 0);
value.AddMember("flow_control", false);
value.AddMember("clocal", true);
SerialInfo serial_info(value);
value = serial_info.toJsonObject();
char writeBuffer[65536];
neujson::FileWriteStream out(stdout, writeBuffer, sizeof(writeBuffer));
neujson::Writer<neujson::FileWriteStream> writer(out);
value.WriteTo(writer);
return 0;
}
输出:
{"serial_port":"/dev/cu.usbserial-AB0JHQVJ","baud_rate":115200,"data_bits":8,"stop_bits":1,"parity":0,"flow_control":false,"clocal":true}