visual studio 2017配置jsoncpp

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kang___xi/article/details/87890485

1.下载jsoncpp

下载链接为:http://sourceforge.net/projects/jsoncpp/

2.编译静态库

(1)打开sln

        下载好源码以后使用visual studio打开文件夹jsoncpp-src-0.5.0\makefiles\vs71下的jsoncpp.sln。这里我使用的是visual studio2017

(2)生成静态库

       (a).生成-》清理解决方案-》重新生成解决方案:

       如果不缺少文件而且SDK版本也对的话就能正常生成库文件json_vc71_libmtd.lib.但是我这个VS2017,SDK版本(10.x)比较高,所以报了以下错误:

error MSB8036: 找不到 Windows SDK 版本8.1。

       (b).然后查看当前项目使用的SDK版本号,“项目”-》"重定解决方案",如下图:

     所以需要下载SDK8.1.

      (c).安装windows 8.1 SDK插件

     进入控制面板,依次进入:程序->程序和功能->在卸载或更改程序中找到visual studio 2017->右键->更改;

        单击更改以后会出现如下界面:

     之后勾选"Windows8.1 SDK和UCRT SDK",然后点击“修改”,即可下载安装SDK8.1

   (3)更改SDK版本

        使用VS打开jsoncpp项目,然后点击菜单栏中“项目” -> “重定解决方案目标” ,即出现如下界面,选择8.1版本,点击确定:

(4)重新编译

    “生成” -> “生成解决方案”,编译成功,在目录“jsoncpp-src-0.5.0\build\vs71\debug\lib_json”生成静态库文件json_vc71_libmtd.lib.

3.测试使用

        在使用时,需要把json_vc71_libmtd.lib文件放到当前项目目录下,同时将jsoncpp的include文件夹也拷贝到当前项目目录下,如下图:

(1)写json文件

a).源码

#include <fstream>
#include "include/json/json.h"
using namespace std;
#pragma comment(lib, "json_vc71_libmtd.lib")
int main()
{
	Json::Value root;
	root["occupatio"] = "paladin";
	root["camp"] = "alliance";
	root["role_id"] = 1;

	Json::StyledWriter writer;
	ofstream os;
	os.open("test.json");
	os << writer.write(root);
	os.close();

	return 0;
}

b).运行结果

生成test.json文件:

(2)从json文件读

a).源码

#include <fstream>
#include <iostream>
#include <string>
#include "include/json/json.h"
using namespace std;

#pragma comment(lib, "json_vc71_libmtd.lib")

int main()
{
	ifstream is("test.json", ios::binary);
	if (!is.is_open())
	{
		cout << "open json file failed" << endl;
		return -1;
	}

	Json::Reader reader;
	Json::Value root;
	int nRole = 0;
	string strOccupation;
	string strCamp;

	if (reader.parse(is, root))
	{
		nRole = root["role_id"].asInt();
		strOccupation = root["occupatio"].asString();
		strCamp = root["camp"].asString();
	}
	is.close();

	cout << "role_id is: " << nRole << endl;
	cout << "occupation is: " << strOccupation << endl;
	cout << "camp is:" << strCamp << endl;
	
	system("pause");
	return 0;
}

b).运行结果

碰到的问题解决方案参考链接:

https://ask.csdn.net/questions/387072

https://bbs.csdn.net/topics/391072052

https://blog.csdn.net/chenqiai0/article/details/47187161

猜你喜欢

转载自blog.csdn.net/kang___xi/article/details/87890485