C/C++学习笔记-rapidjson的简单使用

  • rapidjson是什么,为什么选择rapidjson? 

Answer:rapidjson 是一个 C++ 的 JSON 解析器及生成器 。rapidjson不依赖第三方库,而且只包含头文件,使用方便简单。

  • rapidjson如何安装?

Answer:rapidjson 的安装很简单,因为只包含头文件可用,且不依赖第三方库因此。我们只需把头文件下载下来就可以用。文件下载地址:https://github.com/Tencent/rapidjson.gitrapidjson的官网资料:http://rapidjson.org/zh-cn/。

下载下来后,打开有一个include目录,这就是我们需要的东西,然后把这个东西直接拷贝到我们的工程路径,如果提示有错,先确定拷贝过来后是否是否连接了。连接方法:ecilpse->Roject->Properties->C/C++ General->Paths and Symbols->includes.十分简单。


 有的时候,需要的json格式是十分复杂的,如下所示:

  •  rapidjson生成复杂的json串
{
    "name":"jack",//常规的
    "age":18,
    "sub":["a","b"],//value是数组
    "elp":[ {"a":"A","b":"B"},//value是一个数组且里面每个元素又是一个json格式
            {"c":"C","d":"D"},
          ]
}
std::string build_json_msg(){

	rapidjson::Document doc;//生成DOM元素
	doc.SetObject();
	rapidjson::Document::AllocatorType& allocator = doc.GetAllocator();//生成一个分配器

	//构建键值对
	doc.AddMember("name","jack",allocator);
	doc.AddMember("age",18,allocator);
	//====构建数组元素====["1","2"]
		rapidjson::Value array_sub(rapidjson::kArrayType);//创建一个数组类型对象
		array_sub.PushBack("a",allocator);
		array_sub.PushBack("b",allocator);
	//================
	doc.AddMember("sub",array_sub,allocator);
	//====构建数组object===[{"1":2,},{}]
		rapidjson::Value array_json(rapidjson::kArrayType);
			rapidjson::Value obj(rapidjson::kObjectType);//每一个数组里面是一个json格式
				obj.AddMember("a","A",allocator);
				obj.AddMember("b","B",allocator);
			array_json.PushBack(obj,allocator);

			rapidjson::Value obj1(rapidjson::kObjectType);//每一个数组里面是一个json格式
				obj1.AddMember("c","C",allocator);
				obj1.AddMember("d","D",allocator);
			array_json.PushBack(obj1,allocator);
			array_json.PushBack(obj1,allocator);
	doc.AddMember("elp",array_json,allocator);


	rapidjson::StringBuffer s;
	rapidjson::Writer<rapidjson::StringBuffer> writer(s);
	doc.Accept(writer);

	return std::string(s.GetString());

}

 在生成的时候我们需要几个十分重要的对象,Document、AllocatorType。刚开始的三行代码是比较固定的,先申明一个doc和一个分配器。

rapidjson::Document doc;//生成DOM元素
doc.SetObject();
rapidjson::Document::AllocatorType& allocator = doc.GetAllocator();//生成一个分配器

我们添加json元素主要通过doc.AddMember(key,value,分配器)的形式来生成。如果json格式很简单,那么代码也很简单,如下:

doc.AddMember("name","jack",allocator);
doc.AddMember("age",18,allocator);

 但是,如果涉及到数组。就需要注意一下。首先,我们需要创建一个数组类型的对象。然后把数组里面的内容PushBack进去。最后同样通过doc.AddMember()添加进去。但是value却变成了array_sub.说明AddMember()的第二个参数,不仅可以是值还可以是对象。

rapidjson::Value array_sub(rapidjson::kArrayType);//创建一个数组类型对象
		array_sub.PushBack("a",allocator);
		array_sub.PushBack("b",allocator);
	//================
doc.AddMember("sub",array_sub,allocator);

同样,如果数组里面是json串,该怎么办呢?其实写法按着上面的逻辑来,看上面的代码,只不过把‘a’换成object类型的。具体写法如下:

//====构建数组object===[{"1":2,},{}]
		rapidjson::Value array_json(rapidjson::kArrayType);
			rapidjson::Value obj(rapidjson::kObjectType);//每一个数组里面是一个json格式
				obj.AddMember("a","A",allocator);
				obj.AddMember("b","B",allocator);
			array_json.PushBack(obj,allocator);

			rapidjson::Value obj1(rapidjson::kObjectType);//每一个数组里面是一个json格式
				obj1.AddMember("c","C",allocator);
				obj1.AddMember("d","D",allocator);
			array_json.PushBack(obj1,allocator);
			array_json.PushBack(obj1,allocator);
	doc.AddMember("elp",array_json,allocator);
  •  rapidjson解析复杂的json串
  • 7
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据您提供的Makefile,这个错误信息是由于在删除目标文件时出现问题引起的。这可能是由于您的Dev-C++环境配置不正确导致的。 在您的Makefile中,您使用了`$(DEL)`变量来执行删除操作。然而,在Windows环境下,删除操作通常使用`del`命令而不是`devcpp.exe INTERNAL_DEL`。 为了解决这个问题,您可以尝试将以下行: ``` DEL = C:\Program Files (x86)\Embarcadero\Dev-Cpp\devcpp.exe INTERNAL_DEL ``` 替换为: ``` DEL = del ``` 这将使用Windows的`del`命令来执行删除操作。 修改后的Makefile如下所示: ```makefile # Project: 项目1 # Makefile created by Embarcadero Dev-C++ 6.3 CPP = g++.exe CC = gcc.exe WINDRES = windres.exe OBJ = main.o LINKOBJ = main.o LIBS = -L"C:/Program Files (x86)/Embarcadero/Dev-Cpp/TDM-GCC-64/lib" -L"C:/Program Files (x86)/Embarcadero/Dev-Cpp/TDM-GCC-64/x86_64-w64-mingw32/lib" -static-libgcc INCS = -I"C:/Program Files (x86)/Embarcadero/Dev-Cpp/TDM-GCC-64/include" -I"C:/Program Files (x86)/Embarcadero/Dev-Cpp/TDM-GCC-64/x86_64-w64-mingw32/include" -I"C:/Program Files (x86)/Embarcadero/Dev-Cpp/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/9.2.0/include" CXXINCS = -I"C:/Program Files (x86)/Embarcadero/Dev-Cpp/TDM-GCC-64/include" -I"C:/Program Files (x86)/Embarcadero/Dev-Cpp/TDM-GCC-64/x86_64-w64-mingw32/include" -I"C:/Program Files (x86)/Embarcadero/Dev-Cpp/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/9.2.0/include" -I"C:/Program Files (x86)/Embarcadero/Dev-Cpp/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/9.2.0/include/c++" BIN = 项目1.exe CXXFLAGS = $(CXXINCS) -std=c++11 CFLAGS = $(INCS) -std=c++11 DEL = del .PHONY: all all-before all-after clean clean-custom all: all-before $(BIN) all-after clean: clean-custom ${DEL} $(OBJ) $(BIN) $(BIN): $(OBJ) $(CPP) $(LINKOBJ) -o $(BIN) $(LIBS) main.o: main.cpp $(CPP) -c main.cpp -o main.o $(CXXFLAGS) ``` 请尝试使用修改后的Makefile重新编译您的项目,看看是否能够解决问题。如果还有其他错误信息,请提供详细的错误信息,以便我更好地帮助您解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值