以前我从来没有用过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不使用预编译头
在编译生成成功了
- 一个简单的例子
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); } }
JSON在线解析的网址
相关参考资料
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日