C++解析JSON JSONCPP库的使用

    首先去GitHub下载JSONCPP的源码:

JSonCpp的源码

    解压后得到:jsoncpp-master 文件夹

需要的是:jsoncpp-master\src\lib_json 目录下的所有文件和 jsoncpp-master\include\json 目录下的所有文件,在MFC工程目录下新建两个文件夹或者把jsoncpp-master文件夹下的这两个文件夹复制进自己的工程源码目录下。

例如这样:

在VS解决方案视图下新建一个筛选器,其实就是新建一个文件夹或者说一个分类:

C++解析JSON JSONCPP库的使用_第1张图片

把 jsoncpp-master\src\lib_json 目录下的文件添加进这个筛选器里:

C++解析JSON JSONCPP库的使用_第2张图片

为了避免报错需要设置一下这里头的.cpp文件,不用预编译头。例如在json_value.cpp上面右键→属性→配置属性→C/C++→预编译头→不使用预编译头

C++解析JSON JSONCPP库的使用_第3张图片

把这3个.cpp文件全设置一遍,然后再设置项目的包含目录,把你工程源码目录下复制过去的jsoncpp-master\include\json 文件夹包含进去。

在鄙人这里是这个目录:

C++解析JSON JSONCPP库的使用_第4张图片

 然后在需要使用的.cpp目录下引入Json的.h文件:

#include "include/json/json.h"

在鄙人这是这个路径,如果创建的文件夹是其他名字需要酌情修改。

下面是如何使用的例子:

JSON原本长这样:

{"id":1,"Name":"春哥","Address":[{"City":"青青草原","作战地点":"狼堡"},{"City":"狗熊岭","作战地点":"熊洞"}]};

	Json::Reader reader;
	Json::Value jsonObj;
	
	std::string strValue = "{ \"id\":1,\"Name\" : \"春哥\",\"Address\" : [{\"City\":\"青青草原\",\"作战地点\" : \"狼堡\"},{\"City\":\"狗熊岭\",\"作战地点\" : \"熊洞\"}] }";

	if (reader.parse(strValue, jsonObj))
	{
		int id = jsonObj["id"].asUInt();//简化的写法 读取json中的id属性

		Json::Value inatin = jsonObj["id"]; //读取json中的id属性
		id =inatin.asUInt();//标准写法

		estion.Format(L"ID:%d\n", id);
		WriteConsole(hdlWrite, estion, CString(estion).GetLength(), NULL, NULL); //向DOS窗口里输出字符串

		Json::Value timen = jsonObj["Address"];//读取json中的数组

		int nderop =timen.size();//获取数组长度

		for (int i = 0; i < nderop; i++)
		{
			generd =timen[i]["City"].asCString(); //读取数组中的元素
			generd = L"所在地:"+generd + L"\n";
			WriteConsole(hdlWrite, generd, CString(generd).GetLength(), NULL, NULL); //向DOS窗口里输出字符串

			generd = timen[i]["作战地点"].asCString(); //读取数组中的元素
			generd = L"作战地点:" + generd + L"\n";
			WriteConsole(hdlWrite, generd, CString(generd).GetLength(), NULL, NULL); //向DOS窗口里输出字符串

		}


	}
	 

读取的结果:

C++解析JSON JSONCPP库的使用_第5张图片

 

 

你可能感兴趣的:(json)