C++解析JSON JSONCPP库的使用

    首先去GitHub下载JSONCPP的源码:

JSonCpp的源码

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

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

例如这样:

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

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

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

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

在鄙人这里是这个目录:

 然后在需要使用的.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窗口里输出字符串

		}


	}
	 

读取的结果:

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值