因为项目需要,接触了jsoncpp,但是在网上找了很多资料都没有自己想要的,就决定写下这篇文章。
开发环境:Linux
当然这个对windows也是一样适用的。
使用jsoncpp时需要安装两个包jsoncpp 和 scons,我选择的是jsoncpp-src-0.5.0-rc2-amalgamation.tar 和 scons-2.1.0.tar,这个在网上面一大堆。
安装的过程:
参考下面网址:
http://blog.sina.com.cn/s/blog_752aac070101cnfr.html
将jsoncpp-src-0.5.0-rc2-amalgamation.tar 文件解压后,可以直接将里面json的文件放在/usr/include这个目录下,将libjson_linux-gcc-4.1.2_libmt.a libjson_linux-gcc-4.1.2_libmt.so这个两个库文件放在/usr/bin文件下,并将 libjson_linux-gcc-4.1.2_libmt.so这个改名为libjson.so。在使用json.h,编译的时候,加上 -ljson 参数就行。
使用:
参考下面网址:
http://blog.csdn.net/wangchangshuai0010/article/details/18180223
http://www.cppblog.com/wanghaiguang/archive/2013/12/26/205020.html
例子:
这个是我在Linux上编译通过的一段代码:
#include"json/json.h"
#include<iostream>
using namespace std;
int main(int argc, char** argv)
{
Json::Value root;
Json::FastWriter fast;
Json::Value arrayObj; // 构建对象
Json::Value new_item, new_item1;
new_item["date"] = "2011-11-11";
new_item["hello"] = "nihao";
new_item1["time"] = "11:11:11";
arrayObj.append(new_item); // 插入数组成员
arrayObj.append(new_item1); // 插入数组成员
root["股票信息"] = arrayObj;
cout<<fast.write(root)<<endl;
}
编译链接:
g++ jsontext.cpp -ljson
运行结果:
{"股票信息":[{"date":"2011-11-11","hello":"nihao"},{"time":"11:11:11"}]}
下面这个是我在项目中截取的循环生成jsoncpp的代码,仅供参考:
string CHttpReactor::JsonKlinePack(int nOrigDataLen,char *psData)
{
Json::Value root;
Json::FastWriter fast;
Json::Value arrayObj;
// 构建对象
char *pData = psData;
int iCount = 0;
char stockKey[8] = "";
int iRecvLen = nOrigDataLen;
if (iRecvLen < sizeof(int) + 7)
{
return "";
}
memcpy(stockKey, pData, 7);
pData += 7;
memcpy(&iCount, pData, sizeof(int));
pData += sizeof(int);
iRecvLen -= sizeof(int) + 7;
cout << "股票索引 = " << stockKey << endl;
cout << "股票个数 = " << iCount << endl;
root["StockKey"] = Json::Value(stockKey);
root["Count"] = Json::Value(iCount);
HQMsgRKline *pMsgRKline = NULL;
for(int i=0; i<iCount; i++)
{
if(iRecvLen < sizeof(HQMsgRKline))
break ;
Json::Value json_temp;
pMsgRKline = (HQMsgRKline *)pData;
json_temp["Amount"] = Json::Value(pMsgRKline->m_dAmount);
json_temp["Volumn"] = Json::Value(pMsgRKline->m_dVolumn);
json_temp["Close"] = Json::Value(pMsgRKline->m_fClose);
json_temp["High"] = Json::Value(pMsgRKline->m_fHigh);
json_temp["Low"] = Json::Value(pMsgRKline->m_fLow);
json_temp["Open"] = Json::Value(pMsgRKline->m_fOpen);
json_temp["Yesterday"] = Json::Value(pMsgRKline->m_fYesterday);
json_temp["Date"] = Json::Value(pMsgRKline->m_nDate);
arrayObj.append(json_temp); // 插入数组成员
root["港股K线数据"] = arrayObj;
pData += sizeof(HQMsgRKline);
iRecvLen -= sizeof(HQMsgRKline);
}
return fast.write(root);
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/u012654882/article/details/47036681