【超详细】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 ! 其他的后续(可能没有)再更新。
本文地址:https://blog.csdn.net/Flywithdawn/article/details/109385984
上一篇: 再见了!虾米音乐今日正式关停