VS2015配置jsoncpp详解
首先下载一个jsoncpp,然后解压,用vs2015编译。
在jsoncpp-src-0.5.0->makefiles->vs71文件夹下找到jsoncpp.sln文件,打开,有三个工程,对其中lib_json这个工程进行编译生成(可以生成两种库,debug库和release库,二者不同,工程debug的时候需要debug库,release时需要release库)。生成成功后会在jsoncpp-src-0.5.0->build->vs71->debug->lib_json文件夹下得到json_vc71_libmtd.lib文件
编译之后为编译文件
然后打开Vs2015创建一个空的C++项目
右键工程名,选择在文件资源管理器中打开。
然后创建文件夹include,和lib
把jsoncpp-src-0.5.0\include里边内容复制到include文件夹中,把jsoncpp-src-0.5.0\build\vs71\debug\lib_json\json_vc71_libmtd.lib复制到lib文件夹中。
返回VS,在解决方案资源管理器里选择
这个,即可显示刚才创建,但是没有加入到项目里的文件 夹include,lib。VS2015 在项目中创建文件夹就是此方法,
显示值后为
右键这两个文件夹,选择包括在项目中。
然后配置一个工程属性,右键工程名,打开属性。
在工程属性页中添加include文件夹,以及引入lib文件
注:如果此时项目属性页没显示C/C++此时在源文件中新建一个main.cpp 不用写代码 ,创建即可。
选择项目里的include文件夹
应用。
然后添加附加库目录。
链接器常规附加库目录,选择lib文件夹。
最后添加lib文件
链接器输入附加依赖项,把lib文件名输入进去。
然后编写代码:
#include <iostream>
#include <fstream>
#include "json/json.h"
using namespace std;int main()
{//// json Value的新建及key的访问 //////cout << "json Value的新建及key的访问" << endl;// 新建Json::Value对象Json::Value value1;// 给字段赋值,key必须为string型// 类似STL的map,访问一个不存在的字段时会自动新建一个字段 value1["name"] = "英语"; // string型Json::Value value2;value2["name"] = "语文"; // string型value2["score"] = 80; // 整型value2["right"] = true; // bool型value2["percent"] = 12.34567890; // double型value2["count"]; // 单纯的访问一个key,由于该key不存在,所以会新建,值的类型为Json::nullValue// 新建Value对象Json::Value valueArr;valueArr["name"] = "json array"; // string型valueArr["object"] = value1; // json::Value型valueArr["array"].append("array_element_one"); // 访问key为"array",该key不存在,会新建,类型为Json::arrayValue,数组型,且把第一个元素赋值为string型"array element one"valueArr["array"].append("array_element_two"); // 该key已存在,往后面增加元素,赋值为string型"array element two"valueArr["array"].append(33333); // 该key已存在,往后面增加元素,赋值为整型33333valueArr["array"].append(value2); // 该key已存在,往后面增加元素,赋值为json::Value型// 计算其中字段的个数cout << "size = " << valueArr.size() << endl;// key的访问// 访问字段"object"的值,访问一个key前,先预判是否有该keyif (valueArr.isMember("object")){// 存在的话,再判断其value的类型是否是自己预期的,根据前面32行赋值代码可知:"object"的值是Json::Value类型if (valueArr["object"].isObject()){// 转换成对应的类型Json::Value object = valueArr["object"];// 字段检测,取值,可以放在一行中,谨记:先检测是否存在,后判断类型if (object.isMember("name") && object["name"].isString()){string name = object["name"].asString();cout << "valueArr[object] key = name, value = " << name.c_str() << endl;}}}// 访问字段"array"的值if (valueArr.isMember("array") && valueArr["array"].isArray()) // 根据前面33行赋值代码可知:"object"的值是Json::arrayValue类型的{// 注意:虽然类型为Json::arrayValue,也是转换为Json::Value类型的Json::Value arrayObject = valueArr["array"];// 得到其元素个数int array_size = arrayObject.size();// 根据类型,逐个输出元素for (int i = 0; i<array_size; i++){// 若是Json::Value型if (arrayObject[i].isObject()){// 转换成对应的类型Json::Value object = arrayObject[i];// 字段检测,取值if (object.isMember("score") && object["score"].isInt()){int score = object["score"].asInt();cout << "valueArr[array][" << i << "]" << " key = score, value = " << score << endl;}// 字段检测,取值if (object.isMember("percent") && object["percent"].isDouble()){double percent = object["percent"].asDouble();cout << "valueArr[array][" << i << "]" << " key = percent, value = " << percent << endl;}}// 若是string类型if (arrayObject[i].isString()){cout << "valueArr[array][" << i << "] value is " << arrayObject[i].asString() << endl;}// 若是整型if (arrayObject[i].isInt()){cout << "valueArr[array][" << i << "] value is " << arrayObject[i].asInt() << endl;}}}cout << "\n\n" << endl;/// 把Json::Value转换成字符串 ////cout << "把Json::Value转换成字符串" << endl;cout << valueArr.toStyledString() << endl;cout << "\n\n" << endl;/// 从字符串中解析出json::Value ////cout << "从字符串中解析出json::Value" << endl;// 要解析的json字符串std::string strValue = "{\"key1\":\"value1\",\"array\":[{\"key2\":\"value2\"},{\"key2\":999},{\"key2\":\"value4\"}]}";// json对象Json::Value value3;// 开始解析json,解析后的json对象存储在value中,成功返回trueJson::Reader reader;if (reader.parse(strValue, value3)){// 字段key1if (value3.isMember("key1") && value3["key1"].isString()){cout << "value3[key1] = " << value3["key1"].asString() << endl;}// 字段arrayif (value3.isMember("array") && value3["array"].isArray()){Json::Value valueArray = value3["array"];for (int i = 0; i<valueArray.size(); i++){if (valueArray[i].isObject() && valueArray[i].isMember("key2") && valueArray[i]["key2"].isString()){cout << "value3[array][" << i << "].[key2] = " << valueArray[i]["key2"].asString() << endl;}if (valueArray[i].isObject() && valueArray[i].isMember("key2") && valueArray[i]["key2"].isInt()){cout << "value3[array][" << i << "].[key2] = " << valueArray[i]["key2"].asInt() << endl;}}}}cout << "\n\n" << endl;///// 把json::Value写入到文件中 ////cout << "把json::Value写入到文件中" << endl;ofstream ofs;ofs.open("test.json");// 第一种办法:直接输出,带缩进,效果等同于第三种办法//ofs << valueArr.toStyledString();// 第二种办法:快速输出,没有格式//Json::FastWriter fw;//ofs<<fw.write(valueArr)<<endl;// 第三种办法:缩进输出Json::StyledWriter sw;ofs << sw.write(valueArr) << endl;ofs.close();cout << "输出到文件完毕" << endl;cout << "\n\n" << endl;///// 从文件中读取json::Value ////cout << "从文件中读取到json:value" << endl;ifstream ifs;ifs.open("test.json");Json::Value value4;Json::Reader jsonReader;if (jsonReader.parse(ifs, value4)){// 得到字段的个数cout << "size = " << value4.size() << endl;// 访问if (valueArr.isMember("name") && valueArr["name"].isString()){cout << "valueArr[name] = " << valueArr["name"].asString() << endl;}}getchar();return 0;
}
ctrl+f5运行,显示结果为:
此结果表示
添加的第三方库编译时的运行库配置与使用此第三方库的项目的运行库配置不一致引起的。
即,第三方库编译是的运行库选项是“MTd_StaticDebug”,而当前项目中的值为“MDd_DynamicDebug”,因此解决问题的方法是修改当前项目的运行时配置。
右键项目,属性C/C++代码生成选择运行库改为多爱你城调试(/MTd)即可。
应用,确定。Ctrl+f5运行,
运行无误,完毕!
VS2015配置jsoncpp详解相关推荐
- Ehcache配置参数详解
ehcache配置参数详解 <?xml version="1.0" encoding="UTF-8"?><ehcache><dis ...
- Apache+PHP配置过程详解
Apache+PHP配置过程详解 经过两晚上的奋斗终于将Apache配置PHP成功,安装配置过程中走了不少弯路,特记录之. 1.Apache配置PHP个人认为首先要注意的是Apache和PHP的版本信 ...
- 九爷带你了解 nginx 日志配置指令详解
nginx日志配置指令详解 日志对于统计排错来说非常有利的. 本文总结了nginx日志相关的配置如 access_log.log_format.open_log_file_cache.log_not_ ...
- Cocos2d-x win7 + vs2010 配置图文详解(亲测)
Cocos2d-x win7 + vs2010 配置图文详解(亲测) 下载最新版的cocos2d-x.打开浏览器,输入cocos2d-x.org,然后选择Download,本教程写作时最新版本为coc ...
- Java编程配置思路详解
Java编程配置思路详解 SpringBoot虽然提供了很多优秀的starter帮助我们快速开发,可实际生产环境的特殊性,我们依然需要对默认整合配置做自定义操作,提高程序的可控性,虽然你配的不一定比官 ...
- hibenate5.1配置mysql_hibernate5.2的基本配置方法(详解)
目标:将Student实体对象加入数据库 1.首先需要下载三个东西:hibernate,slf4j,mysql. 2.分别取他们的包导入新建的项目中,我这里的版本是:hibernate-release ...
- ASP.NET Core的配置(2):配置模型详解
在上面一章我们以实例演示的方式介绍了几种读取配置的几种方式,其中涉及到三个重要的对象,它们分别是承载结构化配置信息的Configuration,提供原始配置源数据的ConfigurationProvi ...
- python定时任务crontab_【Python】Linux crontab定时任务配置方法(详解)
CRONTAB概念/介绍 crontab命令用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于"crontab"文件中,以供之后读取和执行. cron 系统调度 ...
- oracle tns 代理配置_oracle数据库tns配置方法详解
TNS简要介绍与应用 Oracle中TNS的完整定义:transparence Network Substrate透明网络底层,监听服务是它重要的一部分,不是全部,不要把TNS当作只是监听器. TNS ...
最新文章
- centos6 64位服务器的基本初始化
- 皮一皮:像不像投产不顺利的你...
- java 常量区存放 new_java常量池与对象存储
- php如何设置断点调试,使用 PHPStorm + Xdebug 实现断点调试
- Java知识整理——ServletJSP
- python指定进程断网_python通过scapy模块进行arp断网攻击
- 电脑系统重装后没有声音怎么办​
- 360回归A股,周鸿祎来给BAT和小米添堵了
- Selenium Firefox 官方Webdriver -- Geckodriver 下载地址
- 外网访问内网Tornado
- STM32F103mini教程学习总结与心得(一)
- AutoCAD2008换硬盘后重新激活
- Ubuntu 解决触摸板不识别问题
- 基于IDEA Plugin插件开发,撸一个DDD脚手架
- 行业的英语术语大全之家居类术语
- 黑苹果教程(二)自己制作cdr、dmg镜像
- 小米手机play商店无法下载
- @Transactional Spring 事务的深入学习与使用【两万字】
- java异常在控制台和日志里面的打印记录
- 畅写Office云端SDK :“硬核”赋予企业应用在线文档I在线协作编辑I在线预览I在线格式转换服务