JSON格式的数据报文:
{
"VisitorsInfo": [
{
"IdentityCardNum":"665321199503015478",
"VisitorName": "张三",
"Sex":"男",
"CarNum":"浙A112",
"Destination":"2号楼",
"CurrentTime":"2017-05-27 19:50:02",
"InvalidTime":"2017-05-27 23:59:59"
},
{
"IdentityCardNum":"665321199503015478",
"VisitorName": "张三",
"Sex":"男",
"CarNum":"浙A112",
"Destination":"2号楼",
"CurrentTime":"2017-05-27 19:50:02",
"InvalidTime":"2017-05-27 23:59:59"
}
]
}
代码实现对上述json格式的数据进行转换,读取其中的值
解析代码:
bool CommonTools::JsonToVisitorInfo(char* szResponse,std::vector<VisitorInfo> &visitorList)
{
Document document;
bool ret = true;
do
{
if (document.Parse(szResponse).HasParseError())
{
DISPLAYMAIN_ERROR("VisitorUpdateCallBack Gets wrong json, Parse Fails");
ret= false;
break;
}
if (!document.HasMember("VisitorsInfo"))
{
DISPLAYMAIN_ERROR("visitorinfo Should Have Member VisitorInfo");
ret = false;
break;
}
Value& vVisitorInfoNode = document["VisitorsInfo"];
if (!vVisitorInfoNode.IsArray())
{
DISPLAYMAIN_ERROR("vVisitorInfoNode Shoulud Be an Array");
ret = false;
break;
}
std::string sID;
std::string sSex;
std::string sName;
std::string sCarName;
std::string sArriveTime;
std::string sValidTime;
std::string sDestination;
std::string sCardNum;//卡号
for (SizeType i=0; i!=vVisitorInfoNode.Size(); i++)
{
Value& VNode = vVisitorInfoNode[i];
if ((!VNode.HasMember("IdentityCardNum")) || (!VNode["IdentityCardNum"].IsString()))
{
DISPLAYMAIN_ERROR("vVisitorInfoNode Should Have Member and Type Be String");
ret = false;
break;
}
sID = VNode["IdentityCardNum"].GetString();
if ((!VNode.HasMember("Sex")) || (!VNode["Sex"].IsString()))
{
ret = false;
break;
}
Value& sexNode = VNode["Sex"];
sSex = sexNode.GetString();
if ((!VNode.HasMember("VisitorName")) || (!VNode["VisitorName"].IsString()))
{
DISPLAYMAIN_ERROR("vVisitorInfoNode Should Have Member VisitorName and Type Be String");
ret = false;
break;
}
sName = VNode["VisitorName"].GetString();
if ((!VNode.HasMember("CarNum")) || (!VNode["CarNum"].IsString()))
{
DISPLAYMAIN_ERROR("vVisitorInfoNode Should Have Member CarNum and Type Be String");
ret = false;
break;
}
sCarName = VNode["CarNum"].GetString();
if ((!VNode.HasMember("CurrentTime")) || (!VNode["CurrentTime"].IsString()))
{
DISPLAYMAIN_ERROR("vVisitorInfoNode Should Have Member CurrentTime and Type Be String");
ret = false;
break;;
}
sArriveTime = VNode["CurrentTime"].GetString();
if ((!VNode.HasMember("InvalidTime")) || (!VNode["InvalidTime"].IsString()))
{
DISPLAYMAIN_ERROR("vVisitorInfoNode Should Have Member InvalidTime and Type Be String");
ret = false;
break;
}
sValidTime = VNode["InvalidTime"].GetString();
if ((!VNode.HasMember("Destination")) || (!VNode["Destination"].IsString()))
{
DISPLAYMAIN_ERROR("vVisitorInfoNode Should Have Member Destination and Type Be String");
ret = false;
break;
}
sDestination = VNode["Destination"].GetString();
if ((!VNode.HasMember("CardNum")) || (!VNode["CardNum"].IsString()))
{
DISPLAYMAIN_ERROR("vVisitorInfoNode Should Have Member CardNum and Type Be String");
ret = false;
break;
}
sCardNum = VNode["CardNum"].GetString();
VisitorInfo visitor(sName, sDestination, sArriveTime, sValidTime, sCarName,true, sCardNum, sID);
visitorList.push_back(visitor);
}
if (!ret)
{
break;
}
} while (0);
return ret;
}