//配置文件所在的路径:strFilePath
/*配置文件内容
"Args1": {
"Server": [
{
"Type": "A",
"IP": "127.0.0.1",
"Port": 51000
},
{
"Type": "B",
"IP": "127.0.0.1",
"Port": 52000
}
],
"Client":
{
"Type": {
"Color": "C"
},
"InCondition": {
"OperationCode": [
101,
102
]
}
}
} */
//开始读取
std::fstream fs(strFilePath,std::ios::in);
json::doucment doc;
doc.ParseStream(json::IstreamWrapper(fs));
if(doc.HasParseError() || !doc.IsObject())
{
return false;
}
//对于应用程序含有多个不同的启动参数时,需要确认启动参数 m_strStartupArgs
json::Value::MemberIterator itConf = doc.FindMember(m_strStartupArgs);
if (itConf == doc.MemberEnd())
{
return false;
}
const json::Value& valConf = itConf->value;
if (const json::Value* pValServer = json::Pointer("/Server").Get(valConf))
{
if (pValServer->IsObject())
{
ParseServer(*pValServer);
}
else if (pValServer->IsArray())
{
for (json::Value::ConstValueIterator it = pValServer->Begin(); it != pValServer->End(); ++it)
{
ParseServer(*it);
}
}
}
if (const json::Value* pValClient = json::Pointer("/Client").Get(valConf))
{
const json::Value* pValType = json::Pointer("/Type").Get(*pValClient);
if (pValType && pValType->IsObject())
{
const json::Value* pValColor = json::Pointer("/Color").Get(*pValType);
if (pValColor && pValColor->IsString())
{
m_strColor = pValColor->GetString();
}
else
{
return false;
}
}
const json::Value* pValOperCode = json::Pointer("/InCondition/OperationCode").Get(*pValClient);
if (pValOperCode && pValOperCode->IsArray())
{
for (json::Value::ConstValueIterator it = pValOperCode->Begin(); it != pValOperCode->End(); ++it)
{
if (it->IsUint())
{
objParam.objInCond.vecOperCode.push_back(it->GetUint());
}
}
}
}
// 相关调用函数
void ParseServer(const json::Value& refServer)
{
if (!refServer.IsObject())
{
return;
}
const json::Value* pValType = json::Pointer("/Type").Get(refServer);
if (pValType && pValType->IsString())
{
std::string strType = pValType->GetString();
if (strType == "B")
{
}
else
{
return;
}
}
const json::Value* pValIP = json::Pointer("/IP").Get(refServer);
if (pValIP && pValIP->IsString())
{
m_strIP = pValIP->GetString();
}
const json::Value* pValPort = json::Pointer("/Port").Get(refServer);
if (pValPort && pValPort->IsUint())
{
m_nPort = pValPort->GetUint();
}
}
读取解析JSON格式的配置文件
于 2022-03-18 17:31:57 首次发布
该代码段读取并解析了一个包含Server和Client配置信息的JSON文件。它首先检查文件是否存在,然后使用json库解析流。接着,它查找指定的启动参数,并分别处理Server和Client的配置。对于Server,它遍历数组并提取Type、IP和Port;对于Client,它获取Color和InCondition的OperationCode。如果数据类型或结构不正确,函数将返回错误。
摘要由CSDN通过智能技术生成