C++ 使用boost将json解析的对象存储到map c++;

C++ 使用boost将json解析的对象存储到map c++;,c++,json,boost,C++,Json,Boost,您好,我正在使用boost library c++解析具有以下形式的json对象: {“ser”:[“ser1”,“ser2”], “版本”:[“版本1”,“版本2”]} 使用pt::read_json(jsonobj,config) 现在,我希望将不同的解析json对象部分(键和值)存储到字符串映射和字符串向量中 有什么想法吗?大警告:属性树不是JSON库。它有很大的局限性 这就是说,如果您所希望的只是字符串(向量)的映射,那么这可能足以满足您的需要 让我们简写一下地图类型: using VM

您好,我正在使用boost library c++解析具有以下形式的json对象:

{“ser”:[“ser1”,“ser2”], “版本”:[“版本1”,“版本2”]}

使用pt::read_json(jsonobj,config) 现在,我希望将不同的解析json对象部分(键和值)存储到字符串映射和字符串向量中


有什么想法吗?

大警告:属性树不是JSON库。它有很大的局限性

这就是说,如果您所希望的只是字符串(向量)的映射,那么这可能足以满足您的需要

让我们简写一下地图类型:

using VMap = std::map<std::string, std::vector<std::string> >;
印刷品

ser: { ser1 ser2 }
ver: { ver1 ver2 }

谢谢你,这很有帮助!只有一件事:为什么程序总是返回k和v未在范围内声明,知道吗?@Amamra可能需要启用c++17支持,或者如果没有,则需要重写结构化绑定。这里有一个c++11重写:只是为了好玩,需要c++11之前的版本。只需升级编译器:)
#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 }