Jsoncpp的编译和使用

来源:互联网 发布:淘宝客服标准话术 编辑:程序博客网 时间:2024/06/05 17:47

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编译。

编译

  1. 下载源码,jsoncpp-0.10.5
  2. 编译源码,进入makefiles\msvc2010,打开jsoncpp.sln,编译,编译的结果为静态库,存放在jsoncpp-0.10.5\makefiles\msvc2010\Debug下,release编译同上,结果为lib_json.lib

使用

  1. 引用头文件,拷贝jsoncpp-0.10.5\include到工程目录
  2. 引用lib库,拷贝lib_json.lib到工程目录
  3. 静态引用,#pragma comment(lib, “lib_json.lib”)
  4. 源码实例,主要是读取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;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

使用过程中出现的问题:

  1. 引用jsoncpp库后链接错误 
    这里写图片描述
    原因: 
    由于jsoncpp库的编译时运行库设置的是MT/MTd,而我们的demo程序使用过的是MD/MDd,两个运行库不匹配导致该问题 
    解决办法: 
    设置demo程序的运行库为MTd,解决该问题(或者编辑jsoncpp 库时将运行库改为MDd)