过去两天我一直在尝试了解如何在C ++中执行以下操作:
我有一个json字符串:
[
{
"pid" : 0,
"nick":"Foo",
"score":12,
"ping":50
},
{
"pid":1,
"nick":"Bar",
"score":23,
"ping":24
}
]
我想迭代所有这些孩子,并将例如PlayerID的值放在std::vector
中,以便我可以返回所有这些。
我被困在哪里:
// 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;
我查看了文档,但找不到任何好的东西。此外,我已经尝试了几乎所有的东西,如果它编译没有错误,它会给我什么()预期的对象或类似的东西。我真的被卡住了,感谢任何帮助!提前谢谢。
答案 0 :(得分:4)
PropertyTree的JSON支持没有输入 - data()总是返回一个字符串。
从解析JSON获得的PTree应该包含一个根节点,每个数组元素都有一个未命名的子节点。这些孩子中的每一个都有四个名为子项的值。迭代它的代码应该是:
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);
}