您好,我正在使用boost 库 C++来解析具有以下形式的 json 对象:
{ "ser" : ["ser1","ser2"] , "ver" : ["ver1","ver2"] }
使用 pt::read_json(jsonobj, config) 现在我希望将不同的解析 json 对象部分(键和值)存储到字符串映射和字符串向量中。
有什么想法吗?
大警告:属性树不是 JSON 库。它有很大的局限性。
也就是说,如果您所希望的只是一个字符串(向量)的映射,那么这可能足以满足您的需求。
让我们为地图类型做一个简写:
using VMap = std::map<std::string, std::vector<std::string> >;
现在,让我们使用函数将属性树转换为 VMap:
VMap to_map(ptree const& pt) {
VMap m;
for (auto& [k, v] : pt) {
auto& m_entry = m[k];
for (auto& [k, v] : boost::make_iterator_range(v.equal_range(""))) {
m_entry.push_back(v.get_value<std::string>());
}
}
return m;
}
添加一个print
函数我们可以演示一下:
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
#include <iostream>
#include <map>
using boost::property_tree::ptree;
using VMap = std::map<std::string, std::vector<std::string> >;
VMap to_map(ptree const&);
void print(VMap const&);
int main() {
ptree config;
{
std::istringstream jsonobj(R"({ "ser" : ["ser1","ser2"] , "ver" : ["ver1","ver2"] })");
read_json(jsonobj, config);
}
auto m = to_map(config);
print(m);
}
VMap to_map(ptree const& pt) {
VMap m;
for (auto& [k, v] : pt) {
auto& m_entry = m[k];
for (auto& [k, v] : boost::make_iterator_range(v.equal_range(""))) {
m_entry.push_back(v.get_value<std::string>());
}
}
return m;
}
void print(VMap const& vm) {
for (auto& [k, vv] : vm) {
std::cout << k << ": {";
for (auto& v: vv)
std::cout << " " << v;
std::cout << " }\n";
}
}
印刷
ser: { ser1 ser2 }
ver: { ver1 ver2 }
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句