繁体   English   中英

使用boost属性树来读取int数组

[英]Using boost property tree to read int array

我有一些带有一些整数数组变量的JSON,如下所示:

{"a": [8, 6, 2], "b": [2, 2, 1]}

我想使用boost property_tree,例如:

std::stringstream ss;
boost::property_tree::ptree pt;

ss << "{\"a\": [8, 6, 2], \"b\": [2, 2, 1]}";

boost::property_tree::read_json(ss, pt);
std::vector<int> a = pt.get<std::vector<int> >("a");

这不起作用,我尝试过的int指针也没有任何变化。 我如何从属性树中读取数组?

JSON支持,与boost属性树不一致。

属性树数据集未键入,并且不支持数组。 因此,使用以下JSON /属性树映射:

  • JSON对象映射到节点。 每个属性都是子节点。
  • JSON数组映射到节点。 每个元素都是一个空名称的子节点。 如果节点同时具有命名和未命名子节点,则无法将其映射到JSON表示。
  • JSON值映射到包含该值的节点。 但是,所有类型信息都丢失了; 数字,以及文字“null”,“true”和“false”只是简单地映射到它们的字符串形式。
  • 无法映射包含子节点和数据的属性树节点。

(来自文档

您可以使用辅助函数迭代数组。

#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>

using boost::property_tree::ptree;

template <typename T>
std::vector<T> as_vector(ptree const& pt, ptree::key_type const& key)
{
    std::vector<T> r;
    for (auto& item : pt.get_child(key))
        r.push_back(item.second.get_value<T>());
    return r;
}

int main()
{
    std::stringstream ss("{\"a\": [8, 6, 2], \"b\": [2, 2, 1]}");

    ptree pt;
    read_json(ss, pt);

    for (auto i : as_vector<int>(pt, "a")) std::cout << i << ' ';
    std::cout << '\n';
    for (auto i : as_vector<int>(pt, "b")) std::cout << i << ' ';
}

看到Live On Coliru 输出:

8 6 2 
2 2 1

读你a列表如下:

#include <boost/foreach.hpp>
BOOST_FOREACH(boost::property_tree::ptree::value_type &v, pt.get_child("a.")) {
    cout << v.second.data() << endl;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM