将map转为json是一个常见的需求,在C++中,可以通过rapidjson库来实现。以下是具体的方法:
- 引入rapidjson头文件:
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"
- 创建rapidjson的字符串缓冲区:
rapidjson::StringBuffer buffer;
rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
- 构建需要转换的map:
std::map<std::string, std::string> myMap = {
{"name", "Tom"},
{"age", "20"},
{"city", "Beijing"}
};
- 将map转为json:
writer.StartObject(); // 开始写json对象
for (auto &kv : myMap) {
writer.Key(kv.first.c_str()); // 写入键
writer.String(kv.second.c_str()); // 写入字符串类型的值
}
writer.EndObject(); // 结束json对象
完整的代码如下:
#include <iostream>
#include <map>
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"
int main() {
std::map<std::string, std::string> myMap = {
{"name", "Tom"},
{"age", "20"},
{"city", "Beijing"}
};
rapidjson::StringBuffer buffer;
rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
writer.StartObject();
for (auto &kv : myMap) {
writer.Key(kv.first.c_str());
writer.String(kv.second.c_str());
}
writer.EndObject();
std::cout << buffer.GetString() << std::endl;
return 0;
}
执行以上代码,可以得到以下输出:
{"name":"Tom","age":"20","city":"Beijing"}
另外,如果map中的值是一个嵌套的map,可以使用递归的方式实现:
std::map<std::string, std::map<std::string, std::string>> myMap = {
{"student1", {
{"name", "Tom"},
{"age", "20"}
}
},
{"student2", {
{"name", "Jerry"},
{"age", "21"}
}
}
};
writer.StartObject();
for (auto &kv : myMap) {
writer.Key(kv.first.c_str());
writer.StartObject();
for (auto &innerKv : kv.second) {
writer.Key(innerKv.first.c_str());
writer.String(innerKv.second.c_str());
}
writer.EndObject();
}
writer.EndObject();
以上代码可以将一个嵌套的map转换为json格式。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++中rapidjson将map转为json的方法 - Python技术站