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库配置及简单使用相关推荐

  1. C++ JSON解析之jsoncpp库的使用

    C++ JSON解析之jsoncpp库的使用 1.介绍 轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据,层次结构简洁清晰,易于人阅读和编写,易于机器解析和生成. 2.语法规则 ...

  2. C++ 操作 (读写)json 文件及jsoncpp的配置

    一.json文件简介 为什么要用json文件呢? 我们最常使用的存储数据的方式有很多,比如利用txt文件存,利用xml存,利用word存,利用Excel存,如果我们要求比较高,还可以使用数据库存. 相 ...

  3. 成功案例超详细-vs2019 opencv qt创建动态库被C#调用

    之前有个项目关于图像处理,既用到了opencv,还二次开发了相机提供的动态库.一开始我是用QT写的,然后发现人家只需要我提供一个库函数调用就可以了,但是他是用C#写的.没办法,到处找资料,但是没有找到 ...

  4. 2021卓见杯第三届CCPC河南省省赛所有题超详细题解附加榜单真题解析,简单代码+详细注释+思想,要看的,补题的速速点进来 2021 10.30

    本人现在比较菜,所以难免出现错误,文章中有不太恰当地方,还请大家指正. 是否因为出题人的简短题解而发愁?,是否看不懂出题人的变态模板标程?是否因为自己是小白而苦恼?来看这片文章,帮助你解决这些问题 题 ...

  5. 940mx黑苹果驱动_超详细黑苹果安装图文教程送EFI配置合集及系统

    一.准备工作 所有工具在:黑苹果资源站可以下载到 网站地址:https://jnzr.ewys.net/ 1.两张16g的u盘 其中一张安装pe系统 (老毛桃等)这里自行安装 2.电脑(废话)这里以小 ...

  6. tomcat加白名单_超详细的tomcat管理页面各类型配置总结

    概述 大部分时候,我们的tomcat服务器都不是部署在本机,那么怎么样不通过ftp/sftp方式来将war包部署到tomcat容器呢?tomcat有提供web页面管理应用的功能. tomcat页面管理 ...

  7. springboot thymeleaf 引入jquery_超详细实战:SpringBoot高级之autoconfigure自动化配置

    本篇课程分为概念和实战内容.代码私信: 005获取. 通读全文大概需要五分钟 不知道用过SpringBoot的同学,有没有发现在SpringBoot的maven依赖中经常会有很多的starter之类的 ...

  8. 超详细Klipper 上位机与下位机配置

    (适用多数Mega2560芯片打印机主板,本文使用香橙派ZERO2作为上位机) 上位机:ZERO2 下位机:打印机主板 下载镜像系统 首先,去Armbian官网下载Buster系统镜像:Armbian ...

  9. 超详细KNIME二次开发的环境配置安装过程

    简介 KNIME Analytics Platform基于Eclipse构建,网络上配置很多有所遗漏,因此亲测后,整理出knime配置过程供参考 一.下载开发所需的基本环境 1.1.jdk配置 首先确 ...

最新文章

  1. 路径前面加/和不加/
  2. 【专场】揭秘端到端视频技术
  3. vue拖动添加模块展示_vue-quill-editor的增强模块,提供图片上传,复制插入,拖拽插入...
  4. 2019年,区块链不得不知的 9 件大事!
  5. edit box小技巧
  6. 单应性(同义词直射变换、射影变换和射影性等)(来自wiki)
  7. html酷狗客户端音乐官网代码表,仿酷狗html5手机音乐播放器主要部分代码
  8. 带你深入了解GPU、FPGA和ASIC
  9. AD在PCB设计中导入LOGO
  10. 计算机cpu intel,intel CPU后面带F是什么意思?Intel处理器后面带“F”含义详解
  11. 利用feather快速处理大数据
  12. C# 调用外部exe程序,出现已停止工作
  13. 力扣解法汇总2043-简易银行系统
  14. 【IPFS应用开发】ipfs安卓节点编译 ipfs andriod node
  15. 2023 物联网毕业设计选题推荐 100例
  16. Linux 8250串口控制器
  17. python——difflib内置模块之文本对比
  18. (六)《数电》——二极管与CMOS门电路(入门)
  19. Spring boot 解析mp4格式视频交给前端进行播放
  20. 图像分割中OTSU算法

热门文章

  1. 单片机小白学习之路(三十二)---DS18B20数字温度计(三)
  2. 【松子儿上班的那点事儿】持续打磨产品?屁股决定脑袋,抱歉我就是个打杂的...
  3. windows系统专业版纯净镜像下载
  4. 【13】SCI易中期刊推荐——计算机工程 | 电子与电气(中科院4区)
  5. 五子棋java程序=权值法_五子棋(人机对弈)——Java权值法五子棋博弈
  6. 电子相册制作软件哪一个简单好用?大神推荐的制作技巧在这里
  7. 防火墙和系统安全防护和优化
  8. 校内网开心农场游戏的外挂怎么写呢?
  9. 自动化工具-整理电子发票(Python实现PDF文件的读取和修改)
  10. android 仿课程格子,课程格子对比超级课程表 实用性大比拼