近日使用VC编写客户端程序与http server交互,server端传出的数据打包格式为JSON(JavaScript Object Notation),以前从未听说过此种格式,故百度之。原来JSON和XML格式类似,比XML格式还更方便的感觉,更多内容则度娘即可。
初想自己写个解析程序,结果度娘一番,发现早有完整的solution--jsoncpp是也,C++类封装使用很简单。直接下载一个 ,添加到工程中,包含头文件json.h,然后编辑代码。
int JsonDec( CString strJson )
{
Json::Reader reader;
Json::Value value;
const char* strValue = strJson.GetBuffer(0);
int id = 0;
std::string source;
if (reader.parse(strValue, value,false))
{
std::string source;
std::string title;
std::string url;
int id;
int size = value.size();
int i = 0;
int nRecvNum = 0;
for ( i=0; i<size; ++i)
{
//id source title url就是
id = value[i]["id"].asInt();
source = value[i]["source"].asString();
title = value[i]["title"].asString();
url = value[i]["url"].asString();
//m_pNewsRecv[i].bvalid = 1;
//m_pNewsRecv[i].id = id;
//strcpy_s( m_pNewsRecv[i].source ,source.c_str() );
//strcpy_s( m_pNewsRecv[i].title ,title.c_str() );
//strcpy_s( m_pNewsRecv[i].url ,url.c_str() );
nRecvNum ++;
//if( nRecvNum >= MAX_ELEMENT_NUM )
// break;
}
return nRecvNum;
}
else
{
return 0;
}
}
可以看到,很简单就是一个parse函数,将一个json字符串的信息解析到Json::value之中,然后循环读出value中的值即可。
server端传来的数据是一个列表,列表中每一项有四个子项:id,source,title和url,可以看到for循环中已经将整形的id和几个字符串属性获取到了,将其存储到需要的地方即可。