JSONCPP是较广为使用的json格式数据解析库,简要介绍其编译和使用方法。
编译与使用:
1.解压下载好的文件:jsoncpp-src-0.5.0.tar.gz
2.利用VS2013打开jsoncpp-src-0.5.0\makefiles\vs71目录下的jsoncpp.sln,会出现三个Project:jsontest, lib_json, test_lib_json
3.在lib_json上右击-->Properties-->Configuration Properties-->C/C++-->Code Generation,设置RunTime Library 为MTD
4.在jsoncpp-src-0.5.0\build\vs71\debug\lib_json目录下会生成一个json_vc71_libmtd.lib,将这个lib拷贝至TestJSON工程目录下。
5.将jsoncpp-src-0.5.0\include\json目录下的所有.h文件拷贝至TestJSON工程目录下,并在工程Header Files引入.
6.在TestJSON工程名上 右击-->Properties-->Configuration Properties-->C/C++-->Code Generation, 将Runtime Library设置为MTD。
7.TestJson-->Properties-->Configuration Properties-->Linker-->Input, 在Additional Dependencies里填写json_vc71_libmtd.lib,然后确定
(红字标明的地方一定要保持一致)
报错注意点:
使用时容易出现报错,例如
error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“MTd_StaticDebug”
或者
error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MT_StaticRelease”不匹配值“MD_DynamicRelease”
原因:该错误的出现是因为在编译生成时的运行库设置存在问题,应该统一成相同。
例如:引用的是静态库,调试的是动态库MDd,更改为MTd。
方法:项目属性->配置属性->C/C++->代码生成-->运行库 设置为多线程调试(/MTd)。
运行库对应的不同含义如下:
多线程调试Dll (/MDd) MD_DynamicDebug
多线程Dll (/MD) MD_DynamicRelease
多线程(/MT) MD_StaticRelease
多线程(/MTd) MD_StaticDebug
基本介绍:
1. jsoncpp主要包含三种类型的class:Value、Reader、Writer,jsoncpp中所有的对象、类名都在namespace Json中,使用时只需#include "json.h"
2. Json::Value是jsoncpp中最基本、最重要的类,用于表示各种类型的对象,例如
Json::Value jsonTemp;//表示整个json对象
jsonTemp["name"]=Json::Value("Yng");
3. Json::Writer是一个纯虚类,不能直接使用,一般使用Json::Writer的子类:Json::FasterWriter、Json::StyledWriter、Json::StyledStreamWriter。
Json::FasterWriter fastWriter;
fastWriter.write();
4. Json::Reader主要用于读取,将字符串转换为Json::Value对象。
Json::Reader reader;
Json::Value json_object;
const char* json_document = "{/"age/" : 26,/"name/" : /"huchao/"}";
if (!reader.parse(json_document, json_object))
return 0;
std::cout << json_object["name"] << std::endl;
std::cout << json_object["age"] << std::endl;
输出结果为:
"huchao"
使用第三方源码最简单的方法是直接将文件加入工程,但这样不利于源码、软件产品管理,对于一般软件开发来说,不建议使用。
如果真需要编译成动态链接库、静态导入库的话,可以使用 VS 新建一个工程属性,然后在 Project --> Properties中进行相应的设置即可。