1.jsoncpp开源库打开源代码后,我把项目lib_json的项目属性中库管理器的输出文件名字改了一下(按照自己的习惯)。我改成了json_debug.lib和json_release.lib。这里要注意一点,在release版本中的属性配置中,把汇编程序输出修改为无列表,要不然使用release版本的lib编译不了。
2.Json字符串转换成对象
bool Agent::Parse(const char *pJson)
{
Json::Reader reader;
Json::Value value;
bool ret = reader.parse(pJson,value);
if(ret)
{
if(value.isMember("id"))
{
if(value["id"].isInt())
{
m_id = value["id"].asInt();
}
else
{
return false;
}
}
else
{
return false;
}
if(value.isMember("name"))
{
m_name = value["name"].asString();
if(value["name"].isString())
{
m_name = value["name"].asString();
}
else
{
return false;
}
}
else
{
return false;
}
if(value.isMember("extension"))
{
if(value["extension"].isInt())
{
m_extension = value["extension"].asInt();
}
else
{
return false;
}
}
else
{
return false;
}
if(value.isMember("isLogin"))
{
if(value["isLogin"].isBool())
{
m_isLogin = value["isLogin"].asBool();
}
else
{
return false;
}
}
else
{
return false;
}
int callSize = value["calls"].size();
for(int i = 0; i < callSize; i++)
{
Call call;
call.calling = value["calls"][i]["calling"].asString();
call.called = value["calls"][i]["called"].asString();
call.channelId = value["calls"][i]["channelId"].asInt();
call.skill = value["calls"][i]["skill"].asInt();
m_calls.push_back(call);
}
return true;
}
else
{
return false;
}
}
3.对象转换成json字符串
string Agent::ToJson()
{
Json::Value value;
value["id"] = m_id;
value["name"] = m_name.c_str();
value["extension"] = m_extension;
value["isLogin"] = m_isLogin;
if(m_calls.size() == 0)
{
value["calls"] = Json::Value(Json::nullValue);
}
else
{
int i = 0;
for(CallList::iterator it = m_calls.begin(); it != m_calls.end(); it++)
{
value["calls"][i]["calling"] = (*it).calling.c_str();
value["calls"][i]["called"] = (*it).called.c_str();
value["calls"][i]["channelId"] = (*it).channelId;
value["calls"][i]["skill"] = (*it).skill;
i++;
}
}
Json::FastWriter writer;
string jsonString = writer.write(value);
return jsonString;
}