一步一步教你通过JsonCpp在VS2013上解析Json文件,遍历Json文档

1.  下载安装JsonCpp

    打开vs2017,新建一个空项目,项目名称随意.

    

依次点击  工具->NuGet包管理器(N) ->程序包管理控制台,输入以下命令. Install-Package jsoncpp-vc140-static-32_64,  输入完成之后按下回车键.OK,到这一步,JsonCpp已经安装完成了.  是不是非常方便.  如果有不习惯使用命令行的同学,可以直接使用界面的方式.  

下载完成之后,我们可以看到项目的资源文件中会出现packages.config文件.项目文件夹中也会出现一个packages的文件夹.  用脚指头都可以想到文件夹下面是下载好的JsonCpp,好吧.  现在我们什么配置都不要去做. 直接在需要使用的文件下面添加 

#include <json/json.h>

这行代码就可以使用了.   是不是觉得比网上那些从github上 下载下来之后编译,配置,最后使用的过程简单,快捷,高大上很多?


2.使用JsonCpp

好吧,直接上代码.

<1>.test.json文件,这个是我写的一个音乐播放器的测试Json文件,不知道啥原因,在使用Qt5来解析的时候这里是不需要unicode转码的.  不过没关系,   用C++写俩函数做转换也是方便的很,扯得有点远了. 这里只是让大家注意一下字符编码的问题.

{
	"dis_del":"\u9ed8\u8ba4\u5217\u8868\u000d\u000a",
	"\u9ed8\u8ba4\u5217\u8868\u000d\u000a":[
		{"name":"Hold不住的爱","path":"music","love_flag":true,"lyric":false},
		{"name":"最右","path":"music","love_flag":true,"lyric":false},
		{"name":"就是让你美","path":"music","love_flag":true,"lyric":false}
	],
	"\u6211\u6700\u559c\u6b22\u000d\u000a":[
		{"name":"想你啦","path":"music","love_flag":true,"lyric":false},
		{"name":"漂亮的姑娘就要嫁人啦","path":"music","love_flag":true,"lyric":false},
		{"name":"雨的眼泪在海兴里","path":"music","love_flag":true,"lyric":false}
	]
}

<2>代码

#include <iostream>
#include <string>
#include <fstream>
#include <Windows.h>
#include <json/json.h>

using namespace std;


typedef Json::Reader JsonReader;
typedef Json::Writer JsonWriter;
typedef Json::Value JsonValue;
typedef Json::Value::Members JsonMembers;
void writeJson()
{
	JsonValue root;
	JsonValue item1;
	item1["name"] = "dog";
	item1["age"] = 15;


	JsonValue item2;
	item2["name"] = "cat";
	item2["age"] = 20;


	JsonValue array;
	array.append(item1);
	array.append(item2);
	root["animals"] = array;
	
	JsonMembers members = root.getMemberNames();
	for (auto iter = members.begin(); iter != members.end(); ++iter)
	{
		auto key = *iter;
		if (root[key.c_str()].isObject())
		{


		}
		else if (root[key.c_str()].isArray())
		{
			for (int i = 0; i < root["animals"].size(); ++i)
			{
				auto ret = root["animals"][i]["name"].asString();
				if (!ret.compare(std::string("dog")))
				{
					root["animals"][i]["name"] = "hahha";
				}
			}
		}
	}
	ofstream ofs;
	ofs.open("test2.json");
	ofs << root.toStyledString();


}
int main(int argc, char* argv[])
{
	std::ifstream ifs("test.json");
	JsonReader reader;
	JsonValue root;
	if (!reader.parse(ifs, root, false))
	{
		std::cout << "prase failed!!!" << std::endl;
		return -1;
	}

	JsonMembers members = root.getMemberNames();
	for (auto iter = members.begin(); iter != members.end(); ++iter)
	{
		auto strKey = *iter;
		if (root[strKey.c_str()].isString())
		{
			auto strVal = root[strKey.c_str()].asString();
			std::cout << strKey.c_str() << ":" << strVal.c_str() << std::endl;
		}
		else if (root[strKey.c_str()].isInt())
		{
			auto iVal = root[strKey.c_str()].asInt();
			std::cout << strKey.c_str() << ":" << iVal << std::endl;
		}
		else if (root[strKey.c_str()].isDouble())
		{
			auto dVal = root[strKey.c_str()].asDouble();
			std::cout << strKey.c_str() << ":" << dVal << std::endl;
		}
		else
		{
			auto strVal = root[strKey.c_str()].toStyledString();
			std::cout << strKey.c_str() << ":" << strVal.c_str() << std::endl;
		}
	}
	system("pause");
	return 0;
}
<3> 运行截图
 
 

猜你喜欢

转载自blog.csdn.net/qq_15024587/article/details/80591072