C++ boost属性树获取值

标签 c++ boost boost-propertytree

过去 2 天我一直在尝试找出如何在 C++ 中执行以下操作:

我有一个 json 字符串:

[
     {
       "pid" : 0,
       "nick":"Foo",
       "score":12,
       "ping":50
     },
     {
       "pid":1,
       "nick":"Bar",
       "score":23,
       "ping":24
     }
]

我想遍历所有这些 child ,例如,将 PlayerID 的值放在 std::vector 中,以便我可以返回所有这些 child 。

我被困在这里:

// some code
boost::property_tree::ptree pt;
boost::property_tree::read_json(ss, pt);

std::vector<int> players;
int pid;
BOOST_FOREACH(boost::property_tree::ptree::value_type &v, pt.get_child("pid")) // I also tried with pt or pt.get_child("")
{
    pid = v.second.data();
    players.push_back(pid);
}
return players;

我查看了文档,但找不到任何好的东西。此外,我已经尝试了几乎所有的东西,如果它编译没有错误,它会给我 what() 预期的对象或类似的东西。我真的被卡住了,任何帮助表示赞赏!提前致谢。

最佳答案

PropertyTree 的 JSON 支持没有类型 - data() 总是返回一个字符串。

通过解析 JSON 获得的 PTree 应该包含一个根节点,每个数组元素都有一个未命名的子节点。这些 child 中的每一个都有四个已命名的 child 的值(value)观。迭代它的代码应该是:

namespace bpt = boost::property_tree;
bpt::ptree pt;
bpt::read_json(ss, pt);

std::vector<int> players;
int pid;

BOOST_FOREACH(bpt::value_type& v, pt) { // iterate over immediate children of the root
  pid = v.second.get<int>("pid"); // use the converting path getter
  players.push_back(pid);
}

关于C++ boost属性树获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17086632/

相关文章:

c++ - ostream插入运算符与其非成员重载的关系

c++ - C中关于除以零的一些事情

c++ - 模板类的构造函数和析构函数声明语法

c++ - 设置种子 boost::随机

c++ - 有没有理由不使用单位强制类型?

c++ - 如何使用自定义库的 boost 库进行性能测试

c++ - 从 stringstream boost read_xml 不读取 xml 格式

c++ - 如何在 C++ 中使用 boost 库将类对象转换为 json 字符串?

c++ - 递归添加子树以 boost 属性树

c++ - 我如何打印到 LLVM 中的字符串