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