vs2017编译使用jsoncpp

       C++ 解析json的方式有很多,libjson, jsoncpp, boost等,我的另一篇博客有boost解析json的用法,有兴趣的可以看看,本篇介绍jsoncpp的使用。

一 、cmkae vs2017编译jsoncpp

       下载jsoncpp源码:https://github.com/open-source-parsers/jsoncpp

       在源码目录建立build_vs2017目录,如下图配置。第一次点击Configure,需要配置编译选项,我选的编译选项是vs2017 x64. 编译完成后会出现如下红色界面,勾选BUILD_SHARED_LIBS: 生成dll, 其它的test和example可以不用勾选。再次点击Configure完成后就不会有红色了,点击Generate生成项目。

vs2017编译使用jsoncpp_第1张图片

          用vs2017打开项目

vs2017编译使用jsoncpp_第2张图片

       为了debug和release有区别,我把debug版dll加了_d, 如下图:

       dll

vs2017编译使用jsoncpp_第3张图片

       lib

vs2017编译使用jsoncpp_第4张图片

右键jsoncpp_lib --->[仅用于项目]---->仅生成

 

Debug和Release版都以编译一遍。

dll生成的路径 jsoncpp\build_vs2017\src\lib_json\Debug

也可以直接下载我编译好的dll, 点击  jsoncpp_sdk_x64 即可下载。

 

二、vs2017使用jsoncpp

       可以直接解析json字符串,也可以解析文本,data.json文件如下:

{
	"status" : 0 ,          
	"msg"    : "MSG_GETCODE",  
	"resultItem" :{
		"ok":"成功",
		"No":"失败"
	}, 
	"lesson": [
		"Math",
		"English"
	]
}

        写代码前,需要配置jsoncpp,如果想用新式jsoncpp API, 就不需要禁用4996警告,另外debug和release要分开配置。示例代码如下:

#include 
#include 
#include "json.h"
#include 
#include 

using namespace std;

#pragma warning(disable : 4996)  //禁用新式jsoncpp API

#ifdef _DEBUG
	#pragma comment(lib, "jsoncpp_d.lib")
#endif

//从文件解析json
int fileRead()
{
	ifstream ifs;
	ifs.open("data.json");
	assert(ifs.is_open());

	Json::Reader reader;
	Json::Value root;
	if (!reader.parse(ifs, root, false))
	{
		return -1;
	}

	std::string msq = root["msg"].asString();
	int status = root["status"].asInt();

	std::cout << msq << std::endl;
	std::cout << status << std::endl;

	//判断key是否存在,不存在则key对应的值为空
	if (root.isMember("qwert"))
	{
		cout << "存在key: qwert" << endl;
	}
	else
	{
		cout << "不存在key: qwert" << endl;
	}

	//判断值是否为空
	if (root["msg"].isNull())
	{
		cout << "msg对应的值为空" << endl;
	}
	else
	{
		cout << "msg对应的值不为空" << endl;
	}

	//如果没有这个key,那么值也是空
	if (root["msg11"].isNull())
	{
		cout << "msg11对应的值为空" << endl;
	}
	else
	{
		cout << "msg11对应的值不为空" << endl;
	}


	ifs.close();

	return 0;
}

/*
{
	id:1,
	Name:mike,
	Age:15,
	Address:[
		{
			City:Beijing,
			Code:1111
		},
		{
			City:Shanghai,
			Code:2222
		}
	],
	Email:[email protected]
}
*/

int stringRead()
{
	string strValue = "{\"id\" :1, \"Name\" : \"mike\" , \"Age\" :15,"
		"\"Address\" :[{ \"City\" : \"Beijing\" , \"Code\" : \"1111\" }, { \"City\" : \"Shanghai\" , \"Code\" : \"2222\" }], \"Email\" : \"[email protected]\"}";

	Json::Reader read;
	Json::Value jsonObj;

	if (read.parse(strValue, jsonObj))
	{
		string name = jsonObj["Name"].asCString();

		cout << name << endl;
	}

	return 0;
}

int main()
{
	fileRead();

	return 0;
}

      运行结果:

vs2017编译使用jsoncpp_第5张图片

你可能感兴趣的:(#,C++,疑难杂症,jsoncpp,c++,vs2017)