[C++] JsonCPP 的使用 完整配置過程


最近准備開發一個程序 需要用到C++ 解析json 

原始的C++解析json是不現實的 自己也寫不出來json解析方法(主要是不靠譜)

所以找到了jsoncpp 這個庫 但是。。。 因為各種原因 配置的讓我想哭 接下來我來分享一下 我配置這個庫的過程吧

 

首先發現了這個博文(感謝)

https://www.cnblogs.com/esCharacter/p/7657676.html#commentform

從這個博文中找到了json的項目地址 然后下載了下來  https://github.com/open-source-parsers/jsoncpp

得到了這樣的目錄

 

 

接着,按照博文說的開始構建 dist... 這里需要安裝python  我的電腦已經安裝好了 直接運行那個命令 

python amalgamate.py

  發現會失敗... 

  會提示找不到一個文件...

  去看了github上面的iss 然后知道需要先cmake 一下 

  但是那個提出解決方案的人是ubuntu 的操作系統 在windows下默認是沒有cmake的 

  我就想到了我的vs2019似乎是有這個文件的 在vs的安裝目錄下直接搜索 cmake.exe 然后找到了 打開這個文件所在位置

  cmd 切換目錄到 jsoncpp源碼根目錄 拖動cmake.exe 到cmd窗口 輸入一個空格 然后拖入CMakeLists.txt 執行即可

 

   這時候才可以運行 python amalgamate.py

  之后就能得到dist 復制里面的所有文件和文件夾 到你的工程下(和cpp文件同目錄)

  包含頭文件: 

    #include "json/json.h"
    #include "json/json-forwards.h"

  運行博文里面的代碼之后 會發現符號未定義什么的錯誤 

      LNK2019 無法解析的外部符號 "public: __thiscall Json::Value::Value(enum Json::ValueType)" (??0Value@Json@@QAE@W4ValueType@1@@Z),該符號在函數 _main 中被引用 Click       C:\Users\admin\source\repos\Click\源.obj 1

  這個是因為沒有lib文件導致的 

  百度之后發現他們都是用vc6編譯的 

  但是我發現那個jsoncpp文件夾下 有一個sln 文件 雙擊之后打開工程 在右側找到jsoncpp_lib 項目 設置為運行 設置 

 

 

  然后編譯 注意看編譯器的輸出 找到lib文件的位置

  把.lib文件復制到你的項目文件夾里面 與.cpp文件同路徑

  代碼中導入 lib文件

  然后你的項目也要設置(這里是要和編譯的lib文件一致 所以 都是Debug模式也是可以的吧(猜測))

 

 

  完整測試代碼如下

#include <iostream>
#include "json/json.h"
#include "json/json-forwards.h"
#pragma comment(lib,"jsoncpp.lib")
using namespace std;
int main()
{
    try {
        //Json::Value jsonRoot; //定義根節點
        Json::Value jsonItem; //定義一個子對象
        jsonItem["item1"] = "one"; //添加數據
        jsonItem["item2"] = 2;
        //jsonRoot.append(jsonItem);
        //jsonItem.clear(); //清除jsonItem
        jsonItem["item1.0"] = 1.0;
        jsonItem["item2.0"] = 2.0;
        //jsonRoot["item"] = jsonItem;
        cout << jsonItem.toStyledString() << endl; //輸出到控制台
    }catch(Json::LogicError)
    {
        cout << "發生異常" << endl;
    }
    return 0;
}

 

最終輸出

 

 

就徹底成功了.....

 

對我而言 出現這樣的問題... 就是沒用過lib的原因吧.... 第一次通過原始的C++使用這樣的庫

此次沒有使用QT的原因就i是感覺Qt項目發行之后 體積太大了.... 

原生C++ 解析json確實不太方便...

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM