C++-如何使用JSONCPP库来读写JSON文件(搭建环境)

摘要:
以前我从来没有用过JSON这种文件格式,现在工作上和前端的程序员对接的地方越来越多的使用JSON了。还好有以前小组长留下的JSONCPP项目代码,作为参考。也是学了好长时间,才学会怎么使用JSONCPP,但也不是很熟悉。错误问题如图所示后来我又去别的网址上下载了一个老版本的JSONCPP库文件,https://sourceforge.net/projects/jsoncpp/这个放到我的VS2012项目里是可以用的。

以前我从来没有用过JSON这种文件格式,现在工作上和前端的程序员对接的地方越来越多的使用JSON了。

还好有以前小组长留下的JSONCPP项目代码,作为参考。

也是学了好长时间,才学会怎么使用JSONCPP,但也不是很熟悉。遇到需求,边做边学,一点点完善吧。

  • 什么是JSON?

直接去看百度百科和别人博客是怎么介绍的吧,我就不写了。

https://baike.baidu.com/item/JSON/2462549?fr=aladdin

https://blog.csdn.net/guotianqing/article/details/94378309

https://www.cnblogs.com/SanMaoSpace/p/3139186.html

https://www.zhihu.com/question/23679907

  • 下载库文件

JSONCPP是开源的,可以在GitHub上下载,https://github.com/open-source-parsers/jsoncpp

但是我发现在Git上下载的这个库也行可能是太新了,我用的是VS2012版本低,用这个库编译会出错。我怀疑可能是版本不对应的问题。

具体原因是什么我也不知道。有知道的大神,可以给我留言。

错误问题如图所示

C++-如何使用JSONCPP库来读写JSON文件(搭建环境)第1张

后来我又去别的网址上下载了一个老版本的JSONCPP库文件,https://sourceforge.net/projects/jsoncpp/

这个放到我的VS2012项目里是可以用的。

  • 如何使用

帮助文档说明http://open-source-parsers.github.io/jsoncpp-docs/doxygen/index.html

把下载的JSONCPP压缩包解压后,可以得到如下

C++-如何使用JSONCPP库来读写JSON文件(搭建环境)第2张

我们需要头文件hpp和源文件cpp,到D盘自己在新建一个文件夹,来存放

复制include这个文件夹

C++-如何使用JSONCPP库来读写JSON文件(搭建环境)第3张

复制lib_json这个文件夹到D:jsoninclude里

C++-如何使用JSONCPP库来读写JSON文件(搭建环境)第4张

最终结果如下

C++-如何使用JSONCPP库来读写JSON文件(搭建环境)第5张

C++-如何使用JSONCPP库来读写JSON文件(搭建环境)第6张

  • 搭建项目

创建一个基于对话框的MFC项目(多字节)

1.添加附加包含目录

C++-如何使用JSONCPP库来读写JSON文件(搭建环境)第7张

2.添加附加库目录

C++-如何使用JSONCPP库来读写JSON文件(搭建环境)第8张

3.添加头文件

C++-如何使用JSONCPP库来读写JSON文件(搭建环境)第9张

4.添加cpp到源文件里

C++-如何使用JSONCPP库来读写JSON文件(搭建环境)第10张

C++-如何使用JSONCPP库来读写JSON文件(搭建环境)第11张

C++-如何使用JSONCPP库来读写JSON文件(搭建环境)第12张

5.编译

报错了,

C++-如何使用JSONCPP库来读写JSON文件(搭建环境)第13张

6.解决报错

设置C++-如何使用JSONCPP库来读写JSON文件(搭建环境)第14张

这三个cpp不使用预编译头

C++-如何使用JSONCPP库来读写JSON文件(搭建环境)第15张

C++-如何使用JSONCPP库来读写JSON文件(搭建环境)第16张

在编译生成成功了

C++-如何使用JSONCPP库来读写JSON文件(搭建环境)第17张

  • 一个简单的例子
voidCMFCApplication4Dlg::OnBnClickedButton1()
{
    //TODO: 在此添加控件通知处理程序代码

    string f = "D:\1\2\123.json";

    //写json文件
Json::Value root;
    Json::FastWriter writer;
    Json::Value person;

    person["age"] = 28;
    person["name"] = "sb";
    root.append(person);

    string json_file =writer.write(root);
    ofstream ofs;
    ofs.open(f);
    assert(ofs.is_open());
    ofs <<json_file;

}
voidCMFCApplication4Dlg::OnBnClickedButton2()
{
    //TODO: 在此添加控件通知处理程序代码

    //读json文件
ifstream ifs;
    ifs.open("D:\1\2\123.json");
    assert(ifs.is_open());

    Json::Reader reader;
    Json::Value root;

    if (!reader.parse(ifs, root, false))
    {
        AfxMessageBox("reader parse error");
        return;
    }

    stringname;
    intage;
    intsize;

    size =root.size();
    for (int i = 0; i < size; i++)
    {
        name = root[i]["name"].asString();
        age = root[i]["age"].asInt();

        char msg[256];
        sprintf_s(msg, "%s,%d", name.c_str(), age);
        AfxMessageBox(msg);
    }

}

C++-如何使用JSONCPP库来读写JSON文件(搭建环境)第18张

JSON在线解析的网址

https://www.json.cn/

https://www.bejson.com/

相关参考资料

https://blog.csdn.net/admin_maxin/article/details/53175694

https://www.jb51.net/article/181816.htm

https://www.json.org/json-en.html

https://www.cnblogs.com/Reyzal/p/5494324.html

https://github.com/open-source-parsers/jsoncpp

https://www.pianshen.com/article/905839459/

Caesar卢尚宇

2021年2月24日

免责声明:文章转载自《C++-如何使用JSONCPP库来读写JSON文件(搭建环境)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇神经网络入门回顾(感知器、多层感知器)GIS小知识下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

tesseract-ocr

标签:pytesseract.pytesseract   winerror    其实也不算自己写的,在网上东找找西找找,合一块问题就解决了。 和谐社会的程序猿不都这样么。。 上正菜。 先安装pillow windows 10上面先打开命令提示符: 注:不知道为啥我装python 3.5的时候蛋疼的选择了管理员安装,所以运行命令提示符的话也需要管理员权限。...

Ubuntu 常用命令

1、查看Linux当前操作系统位数   sudo uname --m   如果显示 i686,你安装了32位操作系统   如果显示 x86_64,你安装了64位操作系统 2、查看Ubunut当前版本号   sudo lsb_release -a 3、Ubuntu 安装SSH服务   sudo apt-get install openssh-server  ...

【区块链】关于ETH/BTC区块的监控

此次我写的是一个小型的shell, 链接钉钉的机器人, 使用过的应该会比较娴熟的了,下面就简述一下把 主要的功能就是, 当发现本地数据库区块跟网络上的区块差距相差较大的时候就代表, 数据同步有问题, 这个时候, 发出一条告警出来, 对于比特网络来说,我用的是https://blockchair.com/ 注意到的哥们已经发现了, 在首页的下方就是它的API...

Reflexil

https://github.com/sailro/Reflexil/issues/47Instructions on how to install Reflexil would be much appreciated, since there is no README, and this information is not readily availa...

vue.js 本地调用远程接口进行开发,如何进行跨域及cookie传递

在前后端分离vue作为前端框架,在使用服务器接口时面临的第一个问题就是跨域。本文涉及内容仅保证在vue-cli3.0脚手架创建的项目中、及本地调试中有效(使用之前版本脚手架创建的项目请自行转换),本文内容不适用于服务器端前后台打包部署。 一、处理跨域接口调用 1、在项目根目录下建立vue .config.js文件 2、在vue.config.js中配置本...

HTTP接口抓包工具之Fiddler

Fiddler的基本功能介绍: Fiddler是最强大最好用的Web调试工具之一,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据,Fiddler包含了一个强大的基于时间脚本的子系统,并且能使用.NET语言进行扩展。对HTTP协议越了解,就能越掌握Fiddler的使用方法。越使用Fiddler,就越能帮助了解...