[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  我的电脑已经安装好了 直接运行那个命令 

1
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确实不太方便...

 

作者:cjdty

出处:https://www.cnblogs.com/cjdty/p/11556096.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   Startu  阅读(12373)  评论(5编辑  收藏  举报
more_horiz
keyboard_arrow_up light_mode palette
选择主题
点击右上角即可分享
微信分享提示