Jsoncpp的编译和使用
jsoncpp是C++程序用来解析json的开源库,支持c++11,目前该项目已经迁移到GitHub上面。
地址:https://github.com/open-source-parsers/jsoncpp
下载是需要注意,目前jsoncpp支持了c++11,下载是需要注意区分
- 1.y.z is built with C++11
- 0.y.z can be used with older compilers
目前最新的非c++11版本是:0.10.5,c++11最新的版本是:1.6.5。我使用的是0.10.5版本,采用VS2015编译。
编译
- 下载源码,jsoncpp-0.10.5
- 编译源码,进入makefiles\msvc2010,打开jsoncpp.sln,编译,编译的结果为静态库,存放在jsoncpp-0.10.5\makefiles\msvc2010\Debug下,release编译同上,结果为lib_json.lib
使用
- 引用头文件,拷贝jsoncpp-0.10.5\include到工程目录
- 引用lib库,拷贝lib_json.lib到工程目录
- 静态引用,#pragma comment(lib, “lib_json.lib”)
- 源码实例,主要是读取json对象,代码如下:
#include <windows.h>
#include <string>
#include <iostream>
#include "json.h"
using namespace std;
#pragma comment(lib, "lib_json.lib")
int main()
{
string strValue = "{\"res\":\"success\",\"info\":\"{\\\"port\\\":1024,\\\"host\\\":\\\"192.168.5.215\\\"}\"}";
cout << strValue << endl;
Json::Reader reader;
Json::Value value;
if (reader.parse(strValue, value))
{
cout << value["res"].asString() << endl;
cout << value["info"].asString() << endl;
Json::Reader readerTemp;
Json::Value valueTemp;
if (readerTemp.parse(value["info"].asString(), valueTemp))
{
cout << valueTemp["host"].asString() << endl;
cout << valueTemp["port"].asInt() << endl;
}
}
return 0;
}
使用过程中出现的问题:
- 引用jsoncpp库后链接错误
原因:
由于jsoncpp库的编译时运行库设置的是MT/MTd,而我们的demo程序使用过的是MD/MDd,两个运行库不匹配导致该问题
解决办法:
设置demo程序的运行库为MTd,解决该问题
3310





