Jsoncpp引用规范
解析JSON需要引入库文件。C++开源的有很多库。git上面也有许多Json的解析库。目前使用的最多的是https://github.com/open-source-parsers/jsoncpp。 名为jsoncpp。
使用Jsoncpp
方法一:使用Jsoncpp生成的lib文件
1.从git上下载jsoncpp:https://github.com/open-source-parsers/jsoncpp
2.解压下载好的文件:jsoncpp-src-0.5.0.tar.gz
3.使用vs打开jsoncpp-src-0.5.0.tar.gz\makefile\vs71目录下中的jsoncpp.sln,打开后会出现三个项目工程jsontest, lib_json, test_lib_json
4.在lib_json上右击->Properties-->Configuration Properties-->C/C++-->Code Generation,记录下右边的Runtime Library的属性内容(因为两个工程的属性要保持相同,否则会编译出错)
5.编译lib_json,显示编译成功以后,在jsoncpp_src-0.5.0\build\vs71\debug\lib_json目录下会生成一个json_vc71_libmtd.lib,将这个lib拷贝到需要使用jsoncpp的工程目录下。
6.将jsoncpp-src-0.5.0\include\json目录下的所有的.h文件拷贝到需要使用jsoncpp的工程目录下,并在头文件中引入这个文件。
7.找到自己的项目工程,点击Properties-->Configuration Properties-->C/C++-->Code Generation,将Runtime Library修改为第4步中相同的内容。
8.在工程名上右键点击Properties-->Configuration Properties-->Linker-->Input,在Additional Dependencies里面填写json_vc71_libmtd.lib,点击应用,点击编译即可。
方法二:使用Jsoncpp包中的.cpp和.h文件
1.从git上下载jsoncpp:https://github.com/open-source-parsers/jsoncpp
2.解压上面下载的Jsoncpp文件.得到文件jsoncpp-src-0.5.0
3.将jsoncpp-src-0.5.0\include目录下的json文件夹拷贝到当前项目工程目录下
4.将jsoncpp-src-0.5.0\src\lib_json 目录下的所有文件拷贝到
5.在vs中引入工程目录中在jsoncpp-src-0.5.0中导入的文件
如图
在需要使用这个库的时候,在cpp中include"json/json.h"即可。
在编译的时候可能报错:作以下改动即可
- json_reader.cpp 中加入#include "stdafx.h",将#include<json/reader.h>改为#include“json/reader.h”,#include<json/value.h>改为#include "json/value.h";
- json_value.cpp中加入#include "stdafx.h",将#include <json/value.h>改为#include "json/value.h", #include <json/writer.h>改为 #include "json/writer.h";
- json_writer.cpp中加入#include "stdafx.h",将#include <json/writer.h>改为#include "json/writer.h"。
以上方法来自:http://blog.csdn.net/chenxun_2010/article/details/41847131
抱着学习不能一知半解的心态,测试一下:
1.在方法一中,第4步:
(关于工程属性的作用在我的博客中有转载)
①修改使用jsoncpp的项目工程使得它与jsoncpp的原本的运行库不同
测试结果:报错:
复制一条:
错误43error LNK2005: "bool __cdecl std::uncaught_exception(void)" (?uncaught_exception@std@@YA_NXZ) 已经在 libcpmtd.lib(uncaught.obj) 中定义。
由运行库不同,可知:MTd 使用的是 libcpmtd.lib。
由此猜想为什么保持一致,是因为MTd,MDd都会引用一个库,而几个库中有许多相同的函数或者类,因此如果不保持一致则会引起重复定义。
②修改原本工程的运行库属性:
属性中分为Release和Debug版本,Release版本有:MT /MD,Debug版本有:MTd/MDd 版本,原本的是MTd,现在修改为MDd。使用jsoncpp的项目工程中也同样修改为MDd。
测试结果运行成功。
解析JSON需要引入库文件。C++开源的有很多库。git上面也有许多Json的解析库。目前使用的最多的是https://github.com/open-source-parsers/jsoncpp。 名为jsoncpp。
使用Jsoncpp
方法一:使用Jsoncpp生成的lib文件
1.从git上下载jsoncpp:https://github.com/open-source-parsers/jsoncpp
2.解压下载好的文件:jsoncpp-src-0.5.0.tar.gz
3.使用vs打开jsoncpp-src-0.5.0.tar.gz\makefile\vs71目录下中的jsoncpp.sln,打开后会出现三个项目工程jsontest, lib_json, test_lib_json
4.在lib_json上右击->Properties-->Configuration Properties-->C/C++-->Code Generation,记录下右边的Runtime Library的属性内容(因为两个工程的属性要保持相同,否则会编译出错)
5.编译lib_json,显示编译成功以后,在jsoncpp_src-0.5.0\build\vs71\debug\lib_json目录下会生成一个json_vc71_libmtd.lib,将这个lib拷贝到需要使用jsoncpp的工程目录下。
6.将jsoncpp-src-0.5.0\include\json目录下的所有的.h文件拷贝到需要使用jsoncpp的工程目录下,并在头文件中引入这个文件。
7.找到自己的项目工程,点击Properties-->Configuration Properties-->C/C++-->Code Generation,将Runtime Library修改为第4步中相同的内容。
8.在工程名上右键点击Properties-->Configuration Properties-->Linker-->Input,在Additional Dependencies里面填写json_vc71_libmtd.lib,点击应用,点击编译即可。
方法二:使用Jsoncpp包中的.cpp和.h文件
1.从git上下载jsoncpp:https://github.com/open-source-parsers/jsoncpp
2.解压上面下载的Jsoncpp文件.得到文件jsoncpp-src-0.5.0
3.将jsoncpp-src-0.5.0\include目录下的json文件夹拷贝到当前项目工程目录下
4.将jsoncpp-src-0.5.0\src\lib_json 目录下的所有文件拷贝到
5.在vs中引入工程目录中在jsoncpp-src-0.5.0中导入的文件
如图
在需要使用这个库的时候,在cpp中include"json/json.h"即可。
在编译的时候可能报错:作以下改动即可
- json_reader.cpp 中加入#include "stdafx.h",将#include<json/reader.h>改为#include“json/reader.h”,#include<json/value.h>改为#include "json/value.h";
- json_value.cpp中加入#include "stdafx.h",将#include <json/value.h>改为#include "json/value.h", #include <json/writer.h>改为 #include "json/writer.h";
- json_writer.cpp中加入#include "stdafx.h",将#include <json/writer.h>改为#include "json/writer.h"。
抱着学习不能一知半解的心态,测试一下:
1.在方法一中,第4步:
(关于工程属性的作用在我的博客中有转载)
①修改使用jsoncpp的项目工程使得它与jsoncpp的原本的运行库不同
测试结果:报错:
复制一条:
错误43error LNK2005: "bool __cdecl std::uncaught_exception(void)" (?uncaught_exception@std@@YA_NXZ) 已经在 libcpmtd.lib(uncaught.obj) 中定义。
由运行库不同,可知:MTd 使用的是 libcpmtd.lib。
由此猜想为什么保持一致,是因为MTd,MDd都会引用一个库,而几个库中有许多相同的函数或者类,因此如果不保持一致则会引起重复定义。
②修改原本工程的运行库属性:
属性中分为Release和Debug版本,Release版本有:MT /MD,Debug版本有:MTd/MDd 版本,原本的是MTd,现在修改为MDd。使用jsoncpp的项目工程中也同样修改为MDd。
测试结果运行成功。