c++ - 在 c++ / Arduino 中从 JSON 对象创建结构
问题描述
我的 Arduino 上的 SD 上有一个很大的 JSON 配置文件
"general": {
"dhcp": true,
"macAddress": [500,500,500,500,500,500],
"destinationIP": [500,500,500,500],
"serverHostname": null,
"interval": 5,
"commaDecimalSeperator": true,
"baudrate": 115200
},
"networking": {
"ipAddress": [500,500,500,500],
"subnetMask": [500,500,500,500],
"gateway": [500,500,500,500]
},
"data": {
"csvHeader": "bla;bla;bla",
"csvSeperator": ";",
"filename": "data.csv"
},
and so on...
有没有办法在 Arduino 中将 JSON 对象转换为结构或类似的东西?因为目前我的很多代码只是将 JSON 对象分配给具有相同名称的变量
我当前的代码:
struct General {
bool dhcp;
byte mac[6];
int destinationIP[4];
String serverHostname;
int interval;
bool commaDecimalSeperator;
long baudrate;
};
void setup() {
JsonObject general_1 = doc["general"];
general.dhcp = general_1["dhcp"];
general.interval = general_1["interval"];
general.commaDecimalSeperator = general_1["commaDecimalSeperator"];
general.baudrate = general_1["baudrate"];
}
...
我想要什么:
loadJSONToStructs(doc)
Serial.print(General.dhcp)
解决方案
ArduinoJson库有一个漂亮的在线助手工具来帮助生成其中的一些,例如:
// char* input;
// size_t inputLength; (optional)
StaticJsonDocument<768> doc;
deserializeJson(doc, input, inputLength);
JsonObject general = doc["general"];
JsonArray general_macAddress = general["macAddress"];
int general_macAddress_0 = general_macAddress[0]; // 227
int general_macAddress_1 = general_macAddress[1]; // 197
int general_macAddress_2 = general_macAddress[2]; // 182
int general_macAddress_3 = general_macAddress[3]; // 211
int general_macAddress_4 = general_macAddress[4]; // 1
int general_macAddress_5 = general_macAddress[5]; // 201
JsonArray general_destinationIP = general["destinationIP"];
int general_destinationIP_0 = general_destinationIP[0]; // 10
int general_destinationIP_1 = general_destinationIP[1]; // 0
int general_destinationIP_2 = general_destinationIP[2]; // 0
int general_destinationIP_3 = general_destinationIP[3]; // 2
int general_interval = general["interval"]; // 5
long general_baudrate = general["baudrate"]; // 115200
JsonObject networking = doc["networking"];
JsonArray networking_ipAddress = networking["ipAddress"];
int networking_ipAddress_0 = networking_ipAddress[0]; // 10
int networking_ipAddress_1 = networking_ipAddress[1]; // 0
int networking_ipAddress_2 = networking_ipAddress[2]; // 0
int networking_ipAddress_3 = networking_ipAddress[3]; // 3
JsonArray networking_subnetMask = networking["subnetMask"];
int networking_subnetMask_0 = networking_subnetMask[0]; // 255
int networking_subnetMask_1 = networking_subnetMask[1]; // 0
int networking_subnetMask_2 = networking_subnetMask[2]; // 0
int networking_subnetMask_3 = networking_subnetMask[3]; // 0
JsonArray networking_gateway = networking["gateway"];
int networking_gateway_0 = networking_gateway[0]; // 10
int networking_gateway_1 = networking_gateway[1]; // 0
int networking_gateway_2 = networking_gateway[2]; // 0
int networking_gateway_3 = networking_gateway[3]; // 1
JsonObject data = doc["data"];
const char* data_csvHeader = data["csvHeader"]; // "bla;bla;bla"
const char* data_csvSeperator = data["csvSeperator"]; // ";"
const char* data_filename = data["filename"]; // "data.csv"
推荐阅读
- azure - 如何在我的 Azure 租户中允许公开登录我的应用注册?
- marklogic - Marklogic 中的 cts、fn 和 xdmp 函数有什么区别?
- reactjs - 如何将不同文件中的一个功能导入另一个?
- linear-programming - 为什么 Gurobi 会生成松弛变量?
- pandas - 由于错误“很可能是由于使用有问题的 Accelerate 后端”,无法在 MacOs Catalina 中安装 pandas
- python - 用于异常文件夹结构的 Python setup.py
- javascript - 如何在 NodeJS 中使用 Map 对具有相同属性值的对象进行分组?
- python - 为什么 SublimeREPL 不接受未定义的数据类型?(问题输入字符串)
- python - 列表,转换 Str 列表,替换值,打印新的 str 列表。应该返回 ['*', '2', '3', '*', '5']
- typescript - 对象的类型定义,它对类型的值进行(自我)引用