在vs2017和clion中使用C++的JSON库jsoncpp

最近需要用c++的解析json,发现现有的jsoncpp库可以用,但在网上找的教程都比较老旧,遇到各种坑,也没找到clion中使用jsoncpp的教程,现在把整个流程记下来给大家参考,无论是vs2017还是clion中使用jsoncpp,都需要先下载源代码,然后再编译源代码的地址为:
https://github.com/open-source-parsers/jsoncpp#generating-amalgamated-source-and-header
在这里插入图片描述

一、vs2017中使用jsoncpp

1、新建一个文件夹build_vs2017放编译好的vs工程使用cmake-gui编译源代码
在这里插入图片描述
source code写源代码的地址,build the binary写新建的build_vs2017这个地址,点configure
2. 出现了红色的再点configure,最后点Generate。这样就生成了vs的工程
在这里插入图片描述

  1. 用vs2017打开工程,在Debug模式下点ALL_BUILD

在这里插入图片描述

  1. (可选)切换成Release模式下点ALL_BUILD

  2. 在build_vs2017/bin/Debug下会生成动态链接文件
    在这里插入图片描述

  3. 在build_vs2017/lib/Debug下会生成静态链接文件
    在这里插入图片描述

  4. (可选)Release的模式下也可以生成静态和动态文件

  5. 在vs中新建工程用来使用jsoncpp,这里命名为postProcess,主程序贴上以下代码
    在这里插入图片描述

// postProcess.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//#pragma warning(disable : 4996)  
//禁用新式jsoncpp API
#include <iostream>
#include <json.h>
int main(){  
std::cout << "这里是JSON测试" << std::endl; 
const char* str = R"({"uploadid": "UP000000","code": 100,"msg": "","files": ""})";
Json::Reader reader;
Json::Value root; 
if (reader.parse(str, root))  // reader将Json字符串解析到root,root将包含Json里所有子元素   
{  std::string upload_id = root["uploadid"].asString();  
// 访问节点,upload_id = "UP000000"    
int code = root["code"].asInt();    
// 访问节点,code = 100  
} 
int t = 0; 
return 0;
}
  1. 在项目目录下新建文件夹jsoncpp
    在这里插入图片描述

  2. 把源代码中的头文件\jsoncpp-master\jsoncpp-master\include\json复制到新建的文件夹jsoncpp下
    在这里插入图片描述

  3. 在新建的文件夹jsoncpp下再新建lib,新建Debug和Release
    在这里插入图片描述

  4. 把上边生成的jsoncpp.lib和jsoncpp_static.cpp放到这里
    在这里插入图片描述

  5. 把生成的jsoncpp.dll放到项目目录下
    在这里插入图片描述

  6. 右键项目属性,在VC++目录下,在“包含目录”中放入头文件,“库目录”中放入生成的jsoncpp.lib文件
    在这里插入图片描述

  7. 继续上一步,在链接器/输入的附加依赖性中添加jsoncpp.lib
    在这里插入图片描述

  8. 点运行就ok啦

二、CLion中使用jsoncpp

这个就稍微简单点

  1. 新建文件夹,build_vsMingW(好像名字写错了,先不管)在这里插入图片描述

  2. 打开cmake-gui,把where to build the binaries的目录换成新建的文件夹build_vsMingW
    在这里插入图片描述

3.生成makefile文件,需要点两次configure,再点generate
在这里插入图片描述

4.进入到该目录下,打开cmd,输入mingw32-make
在这里插入图片描述

  1. 构建完成后,在bin目录下有动态链接文件,在lib目录下有静态链接文件
    在这里插入图片描述
    在这里插入图片描述

6.在Clion中新建Cmake项目,点开CMakeLists.txt[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-feNcViM0-1615358643328)(http://image.huawei.com/tiny-lts/v1/images/f0b9dcd0b15a2a5af657c8a6822f7509_366x247.png@900-0-90-f.png)]

  1. 输入以下两句话,注意改成自己的路径,target_include_directories是jsoncpp的头文件路径,target_link_libraries是静态链接库路径
target_include_directories(postProcess_Clion PUBLIC D:/Project/myproject/postProcess_Clion/jsoncpp/include/json)
target_link_libraries(postProcess_Clion PUBLIC D:/Software/cpplib/jsoncpp-master/jsoncpp-master/build_vsMingW/lib/libjsoncpp.a)

在这里插入图片描述

  1. 在main中输入以下代码,就可以正常运行
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#elif defined(_MSC_VER)
#pragma warning(disable : 4996)
#endif
#include <iostream>
#include "json.h"int main() 
{   
 std::cout<<"hello "<<std::endl;    
 const char* str = R"({"uploadid": "UP000000","code": 100,"msg": "","files": ""})";    Json::Reader reader;   
Json::Value root;    
if (reader.parse(str, root))  // reader将Json字符串解析到root,root将包含Json里所有子元素    
{        
std::string upload_id = root["uploadid"].asString();  // 访问节点,upload_id = "UP000000"        
int code = root["code"].asInt();    
// 访问节点,code = 100    
}
}
```![在这里插入图片描述](https://img-blog.csdnimg.cn/20210310150447417.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQwOTYzNTI=,size_16,color_FFFFFF,t_70)
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值