C++平台下,ArduinoJson 功能强大,调用简单、简洁,远非jsoncpp之流可比。
调用就一个头文件即可。
include <ArduinoJson.hpp>
关于它的使用还是以代码来记录备忘:
一:序列化为json字符串过程:
bool ECNCapHelper::addSnCodeReadingLog(const std::string msn, bool stateN,
std::wstring& respoinseStr) {
DynamicJsonDocument root(8192);
if (stateN)
{
root["sn"] = msn;// "C00001"; sn码
root["ncType"] = ""; //成功时为null
}
else
{
root["sn"] = "NA";// "C00001"; sn码,
std::string mMsg = "读码失败";
root["ncType"] = (mMsg);; //成功时为null
}
root["stationId"] = UTL->ws2s(GSP->LocalStationNumber);//输入
root["result"] = std::to_string((stateN ? 1 : 0)); //0,1 1表示成功,0为失败
root["ncCode"] = "0"; //
root["ncDesc"] = "";
root["machineNo"] = UTL->ws2s(GSP->LocalStationNumber);
root["fixtureNo"] = "";
root["ip"] = UTL->ws2s(GSP->localIP);//要替换成机台本站IP
std::string mCodeType = "二维码";
root["Remark"] = (mCodeType);
char data[8192];
serializeJson(root, data);
string jsonStr = data;
//jsonStr = UTL->EncodeUtf8String(jsonStr);
string jsonRes = action("addSnCodeReadingLog", jsonStr);
string keyValue;
Response_RESULT mResult;
parseResult(jsonRes, mResult,keyValue);
respoinseStr = mResult.mMSG;
return mResult.reponseState();
}
二、字符串解析的过程(支持多重子嵌套解析):
bool ECNCapHelper::parseDATA_ContainerKeyList(const std::string strJ, Resp_ContainerKeyList& mKeyContianer)
{
if (strJ.empty())return false;
DynamicJsonDocument root(8192);
DeserializationError error = deserializeJson(root, strJ);
if (error)
{
return false;
}
JsonObject mData = root["DATA"];
JsonArray mKeyList = mData["containerKeyList"];
int msize = mKeyList.size();
if (mKeyList.size() > 0)
{
int i = 0;
JsonObject idKey = mKeyList[i];
mKeyContianer.mid = (int)idKey["id"];
mKeyContianer.shard = (int)idKey["shard"];
mKeyContianer.containerNumber = (const char*)idKey["containerNumber"];
mKeyContianer.batchNo = (const char*)idKey["batchNo"];
mKeyContianer.keyName = (const char*)idKey["keyName"];
mKeyContianer.keyValue = (const char*)idKey["keyValue"];
mKeyContianer.createName = (const char*)idKey["createName"];
mKeyContianer.createTime = (const char*)idKey["createTime"];
mKeyContianer.updateName = (const char*)idKey["updateName"];
mKeyContianer.updatTime = (const char*)idKey["updateTime"];
mKeyContianer.matNo = (const char*)idKey["matNo"];
mKeyContianer.matVersion = (const char*)idKey["matVersion"];
}
return false;
}