【超详细】C++Json:VS2015的jsoncpp库配置及简单使用
Json
Json是一种数据格式,本来是用于JavaScript的,但是因为他易读,格式明朗等原因,也被用于其他语言中。
JsonCpp是一个C++的Json库,利用他我们可以进行数据传输,状态同步。
下载JsonCpp库
可以从官网下载,也可以从git下载,也可以从各大网站、云盘中下载,不同时间段的资源对应的软件版本和生成模式可能会有出入。
通过搜索我下载到了各种不同的Json包,也搜到了不同的安装攻略,但是却有很多不适用。
现成的Makefile
这种库打开后有makefiles文件夹和include文件夹。
对于此种我们只需要打开makefiles文件夹,找到后缀为.sln的文件,用VS打开。
然后右击解决方案中的lib_json工程,点击生成即可得到后缀名为lib_json.lib的链接库文件,生成在cpp文件夹中的src文件夹之中。
但是要注意的是自己使用的库是什么版本的。
在这里可以修改,有的库下载下来只有x86的,如果你需要64的那请找到一个可以修改平台的库来生成。
同时要保证》》调试–>项目属性–>C/C+±->代码生成中的运行库改为/MTd,在使用时也要将使用的项目改成这个,保证一致。
得到lib_json.lib之后,把这个Lib和库中的头文件也就是include这个文件夹都拷到你要使用的工程目录下,建立一个lib文件夹把Lib放进去。
然后打开你的工程。
在解决方案资源管理器中选择显示所有文件,这样你放进来的文件夹就出现了。右击include文件夹,点击包含在工程内。这样头文件就加进来了。
不想这么做的也可以在项目属性中的VC++目录中的包含目录中把头文件所在路径添加进去。
记得设置这个。
然后在项目属性–>连接器–>输入–>附加依赖项里把lib_json.lib输入进去。
这样就包含好了库和头文件了,可以在项目中使用jsoncpp库了。
没有makefile怎么办?!莫慌!
没有makefile文件夹咋办嘞?
下个有的不就完了?
—┴ (╯-_-)╯╧╧ /摔
没有也不要慌,我们有两种解决方案。
计划A
你看看你下下来的库,是不是有如图所示的文件夹?
这是一个cmake文件夹,可以使用cmake这个工具来生成不同需要的makefile文件。
首先,我们需要有一个工具:CMAKE。这个直接搜索官网进去下载就好了。
在官网找到这个Download,然后下拉找到自己的平台安装包。
一路NEXT就好啦。
打开后就是这种界面,输入源码地址,再选一个构建地址然后就能生成makefile文件啦。
计划B
竟然这么麻烦!!我不想用这个库了!!!
那没关系,咱不用这个库……lib_json.lib文件了。
直接把下载的文件中的Include都添加到项目中去,把头文件都包含进来。然后咱们再把src文件夹中lib_json文件夹里的.cpp文件也悄咪咪的复制一份。直接拿来用!咱不用你的lib了,咱直接用你的cpp!
简单应用
环境配置好了,接下来咱们就该使用他了,那么我们应该咋用呢?
首先我们来看看Json格式的数据:
{"name" : "dijia",
"age" : "nicai",
"sex" : "reallyman"
}
这就是一个简单的Json数据了,称为一个object。他以{ 开始, }结束。里面string:value例如名字:迪迦这样的叫做pair键值对,不同的pair之间使用逗号分隔。
再然后嘞,还有个数组arry形式的json数据。
{"Game":[
{"Cyperpunk 2077":"tiaopiao"
"time":"12:10"
},
{"GTA 6":"no made"
"process":"a file folder"
}
]
}
我们来看一段代码:
Json::Value root;
Json::Reader reader;
这个每次使用都要用,reader和root是自己定义的名字,随便写。
我们现在来读一下上面的第二个json数据。
首先我们不直接放代码里读,咱们直接跳过这一步,毕竟一般咱们都是读文件写文件来用。
所以在工程里建立一个demo.json文件,把这段json复制进去。
然后我们打开文件:
ifstream is("demo.json",ios::binary);
fstream是以不同的流形式打开文件,第一个字母分别i,o,以及直接是fstream分别对应输入输出输入输出。请注意句读:输入,输出,输入输出。
所以读文件就用ifstream,写文件就用ofstream啦。
打开文件后我们开始读。
那么应该怎么读呢?
我们先看一下这个文件内部的一个object:
{"Cyperpunk 2077":"tiaopiao"
"time":"12:10"
}
对于这种数据单独放着,我们这么读:
string Cyper =root["Cyperpunk 2077"].asString
string time =root["time"].asString
这样Cyper的值就是:“tiaopiao”,Time的值就是"time"了。
当然,如果后面的数值是整形,就要用Int型来接,后面跟的也就是asInt了。
现在你会读json的object了!鼓掌(piapiapiapia)。
我们再来看一下这个完整的数据应该怎么读。
{"Game":[
{"Cyperpunk 2077":"tiaopiao"
"time":"12:10"
},
{"GTA 6":"no made"
"process":"a file folder"
}
]
}
对于数组形式,我们当然就按数组读啦。前后两个就是arry[0]和arry[1]的区别而已。
直接上代码:
unsigned int i=0,j=1;
String CyperArray=root["Game"][i]["Cyperpunk 2077"].asString
String GTA=root["Game"][j]["GTA 6"].asString
敲黑板:这个地方要注意的是array[0]和array[1]中的0和1使用了无符号整型的i和j来代替,因为直接输入0和1,jsoncpp会有多个重载函数对应,无法匹配,所以我们要定义两个来替换。
Over!Over ! 其他的后续(可能没有)再更新。
【超详细】C++Json:VS2015的jsoncpp库配置及简单使用相关推荐
- C++ JSON解析之jsoncpp库的使用
C++ JSON解析之jsoncpp库的使用 1.介绍 轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据,层次结构简洁清晰,易于人阅读和编写,易于机器解析和生成. 2.语法规则 ...
- C++ 操作 (读写)json 文件及jsoncpp的配置
一.json文件简介 为什么要用json文件呢? 我们最常使用的存储数据的方式有很多,比如利用txt文件存,利用xml存,利用word存,利用Excel存,如果我们要求比较高,还可以使用数据库存. 相 ...
- 成功案例超详细-vs2019 opencv qt创建动态库被C#调用
之前有个项目关于图像处理,既用到了opencv,还二次开发了相机提供的动态库.一开始我是用QT写的,然后发现人家只需要我提供一个库函数调用就可以了,但是他是用C#写的.没办法,到处找资料,但是没有找到 ...
- 2021卓见杯第三届CCPC河南省省赛所有题超详细题解附加榜单真题解析,简单代码+详细注释+思想,要看的,补题的速速点进来 2021 10.30
本人现在比较菜,所以难免出现错误,文章中有不太恰当地方,还请大家指正. 是否因为出题人的简短题解而发愁?,是否看不懂出题人的变态模板标程?是否因为自己是小白而苦恼?来看这片文章,帮助你解决这些问题 题 ...
- 940mx黑苹果驱动_超详细黑苹果安装图文教程送EFI配置合集及系统
一.准备工作 所有工具在:黑苹果资源站可以下载到 网站地址:https://jnzr.ewys.net/ 1.两张16g的u盘 其中一张安装pe系统 (老毛桃等)这里自行安装 2.电脑(废话)这里以小 ...
- tomcat加白名单_超详细的tomcat管理页面各类型配置总结
概述 大部分时候,我们的tomcat服务器都不是部署在本机,那么怎么样不通过ftp/sftp方式来将war包部署到tomcat容器呢?tomcat有提供web页面管理应用的功能. tomcat页面管理 ...
- springboot thymeleaf 引入jquery_超详细实战:SpringBoot高级之autoconfigure自动化配置
本篇课程分为概念和实战内容.代码私信: 005获取. 通读全文大概需要五分钟 不知道用过SpringBoot的同学,有没有发现在SpringBoot的maven依赖中经常会有很多的starter之类的 ...
- 超详细Klipper 上位机与下位机配置
(适用多数Mega2560芯片打印机主板,本文使用香橙派ZERO2作为上位机) 上位机:ZERO2 下位机:打印机主板 下载镜像系统 首先,去Armbian官网下载Buster系统镜像:Armbian ...
- 超详细KNIME二次开发的环境配置安装过程
简介 KNIME Analytics Platform基于Eclipse构建,网络上配置很多有所遗漏,因此亲测后,整理出knime配置过程供参考 一.下载开发所需的基本环境 1.1.jdk配置 首先确 ...
最新文章
- 路径前面加/和不加/
- 【专场】揭秘端到端视频技术
- vue拖动添加模块展示_vue-quill-editor的增强模块,提供图片上传,复制插入,拖拽插入...
- 2019年,区块链不得不知的 9 件大事!
- edit box小技巧
- 单应性(同义词直射变换、射影变换和射影性等)(来自wiki)
- html酷狗客户端音乐官网代码表,仿酷狗html5手机音乐播放器主要部分代码
- 带你深入了解GPU、FPGA和ASIC
- AD在PCB设计中导入LOGO
- 计算机cpu intel,intel CPU后面带F是什么意思?Intel处理器后面带“F”含义详解
- 利用feather快速处理大数据
- C# 调用外部exe程序,出现已停止工作
- 力扣解法汇总2043-简易银行系统
- 【IPFS应用开发】ipfs安卓节点编译 ipfs andriod node
- 2023 物联网毕业设计选题推荐 100例
- Linux 8250串口控制器
- python——difflib内置模块之文本对比
- (六)《数电》——二极管与CMOS门电路(入门)
- Spring boot 解析mp4格式视频交给前端进行播放
- 图像分割中OTSU算法
热门文章
- 单片机小白学习之路(三十二)---DS18B20数字温度计(三)
- 【松子儿上班的那点事儿】持续打磨产品?屁股决定脑袋,抱歉我就是个打杂的...
- windows系统专业版纯净镜像下载
- 【13】SCI易中期刊推荐——计算机工程 | 电子与电气(中科院4区)
- 五子棋java程序=权值法_五子棋(人机对弈)——Java权值法五子棋博弈
- 电子相册制作软件哪一个简单好用?大神推荐的制作技巧在这里
- 防火墙和系统安全防护和优化
- 校内网开心农场游戏的外挂怎么写呢?
- 自动化工具-整理电子发票(Python实现PDF文件的读取和修改)
- android 仿课程格子,课程格子对比超级课程表 实用性大比拼