加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

jsoncpp的使用

发布时间:2020-12-16 19:38:42 所属栏目:百科 来源:网络整理
导读:因为项目需要,接触了jsoncpp,但是在网上找了很多资料都没有自己想要的,就决定写下这篇文章。 开发环境:Linux 当然这个对windows也是一样适用的。 使用jsoncpp时需要安装两个包jsoncpp 和scons,我选择的是jsoncpp-src-0.5.0-rc2-amalgamation.tar 和scon

因为项目需要,接触了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 参数就行。

需要注意两点:

1.按照上面的安装方法,需要执行下面命令更新库函数。因为没有执行ldconfig命令,导致程序在运行的时候找不到so文件,而so文件是一个动态链接库。我们必须用ldconfig来共享它。

2.不要将上面两个tar包解压到同一个目录下。不然可能会出现如下情况:

File "/usr/lib/scons/SCons/Script/Main.py",line 1128,in _main

ldconfig-v

使用:

参考下面网址:

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"}]}


#include"json/json.h"

#include<iostream>

using namespace std;

int main(int argc,char** argv)

{

int arr[9] = {1,2,3,4,5,6,7,8,9};

char brr[9][12] = {"1","2","3","4","5","6","7","8","9"};

Json::Value root;

Json::FastWriter fast;

for(int i=0;i<9;i++)

{

Json::Value new_item;

new_item.append(arr[i]);

new_item.append(brr[i]);

new_item.append(11);

root["key_array"].append(new_item);

}

root["erro"] = Json::Value("0");

cout<<fast.write(root)<<endl;

}

运行结果:

{"erro":"0","key_array":[[1,"1",11],[2,[3,[4,[5,[6,[7,[8,[9,"9",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,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);

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读