一、简介
1、JSON是key-value形式存储传输数据,与XML类似,但数据量较小一些;
2、JSONCPP开源,开源用来解析JSON,C++里最常用,资料多,新手友好;
二、小白使用过程
![1314054-0fb9c2824373576a.png](https://i-blog.csdnimg.cn/blog_migrate/b66eef7206c9d954baff392faffa9286.png)
三、编译JSONCPP源文件
![1314054-42a1e255a536fab9.png](https://i-blog.csdnimg.cn/blog_migrate/61800db5f58e2a8147f50fa0e10f45f5.png)
1、下载地址:https://sourceforge.net/projects/jsoncpp/,这个版本比较老,但照样可以用,最新版本:https://github.com/open-source-parsers/jsoncpp
2、解压文件,jsoncpp-src-0.5.0/makefiles/vs71目录里找到jsoncpp.sln,用VS打开
3、在属性界面选择是Debug模式,选择多线程调试(MTD),也可以选择其他,但要与项目一致
![1314054-39d63603a6d80575.png](https://i-blog.csdnimg.cn/blog_migrate/b34dee59bad62ca9d427ced701d365ae.png)
4、配置好了之后进行编译生成,debug路径(xxx\jsoncpp-src-0.5.0\jsoncpp-src-0.5.0\build\vs71\debug\lib_json)下生成静态链接库json_vc71_libmtd.lib 。如果是release版本则类似。
四、C++设置属性
![1314054-099df265e4581128.png](https://i-blog.csdnimg.cn/blog_migrate/1b6b97741d80fd88c54c6a91c9ba3dac.png)
1、新建win32控制台项目
2、将jsoncpp-src-0.5.0\include\json整个文件夹拷贝到项目源文件所在目录中
3、将jsoncpp-src-0.5.0\jsoncpp-src-0.5.0\build\vs71\debug\lib_json下生成静态链接库json_vc71_libmtd.lib拷贝到项目源文件所在目录中
![1314054-5e93a06982dd21a9.png](https://i-blog.csdnimg.cn/blog_migrate/f9da6a0f7e5982f155501df556742340.png)
4、在项目属性中添加包含目录:将..\json添加到包含目录;由于json_vc71_libmtd.lib库本身就在项目文件目录中,添加的话只能使用..\,所以可以不用添加库目录
![1314054-a222301975b703a9.png](https://i-blog.csdnimg.cn/blog_migrate/c0a690fa232b67c45bf41e14479d2a80.png)
5、添加附加依赖项
![1314054-ca95cfa2ef436b0d.png](https://i-blog.csdnimg.cn/blog_migrate/48eef0b87dfc305eb1986af341646d67.png)
五、测试代码
#include "stdafx.h"
#include "json/json.h"
#includeusing namespace std;
int main(){
const char* str ="{\"praenomen\":\"Gaius\",\"nomen\":\"Julius\",\"cognomen\":\"Caezar\",""\"born\":-100,\"died\":-44}";
Json::Reader reader;
Json::Value root;
if (reader.parse(str, root)){
string praenomen = root["praenomen"].asString();
string nomen = root["nomen"].asString();
string cognomen = root["cognomen"].asString();
int born = root["born"].asInt();
int died = root["died"].asInt();
cout << praenomen + " " + nomen + " " + cognomen<< " was born in year " << born<< ", died in year " << died << endl;
}
system("pause");
return 0;
}
运行中可能报错,需要将运行库改为与之前编译lib一致的模式,这里使用MTD
![1314054-902b20c197ac5f28.png](https://i-blog.csdnimg.cn/blog_migrate/480c591c1beaee2b26909f6eea8b28fa.png)
六、杂
1、之前在网上找编译好的jsoncpp链接库,发现很难找到,并且找到了也很可能不适用;
2、将json文件夹以及生成的静态库放到项目目录中,这样分享代码的时候会方便,否则在其他电脑上无法运行,之后使用相对目录添加包含目录、连接库之类的东西。使用相对路径教程:https://jingyan.baidu.com/article/5225f26b093151e6fa09083f.html
3、参考:
C++解析json文件-VS2010中配置Jsoncpp:http://blog.csdn.net/kekong0713/article/details/52781482
C++ 解析Json——jsoncpp:http://www.cppblog.com/wanghaiguang/archive/2013/12/26/205020.html
Jsoncpp的使用:
https://www.cnblogs.com/kex1n/archive/2011/12/02/2272328.html