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

以前我从来没有用过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版本低,用这个库编译会出错。我怀疑可能是版本不对应的问题。

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

错误问题如图所示

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

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

  • 如何使用

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

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

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

复制include这个文件夹

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

 最终结果如下

 

  • 搭建项目

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

1.添加附加包含目录

2.添加附加库目录

3.添加头文件

4.添加cpp到源文件里

 

 

 5.编译

报错了,

 6.解决报错

设置

 这三个cpp不使用预编译头

 

 在编译生成成功了

  • 一个简单的例子
void CMFCApplication4Dlg::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;

}
void CMFCApplication4Dlg::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;
    }

    string name;
    int age;
    int size;

    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);
    }

}

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日

作者: 阿飞

出处: https://www.cnblogs.com/nxopen2018/>

关于作者:......

如有问题, 可在底部(留言)咨询.

原文地址:https://www.cnblogs.com/nxopen2018/p/14432896.html