我一直在寻找这个问题的答案,但如果之前有人问过这个问题,就不能发现任何事情。我有以下json文件
{"GuiComponents": [
{
"GuiComponent":
{
"screen": "WindowMain",
"type": "class Robot",
"filename": "robot.mesh",
"blueprint": "Betplacement/Robot.json",
"layer": "0",
"position":
{
"x": "0",
"y": "0"
}
}
},
{
"GuiComponent":
{
"screen": "WindowTop",
"type": "class Robot",
"filename": "robot.mesh",
"blueprint": "Betplacement/Robot.json",
"layer": "0",
"position":
{
"x": "0",
"y": "0"
}
}
}
]
}
现在我想迭代GuiComponents中名为GuiComponent的所有子节点,并将每个子节点分配给一个ptree节点。这样我就可以简单地将一个ptree节点传递给任何想要获取特定GuiComponent数据的人,而不会看到所有其他子节点。我找不到用get_child做这个的方法,因为它只抛出一个“没有这样的节点GuiComponent”异常。
非常感谢任何帮助。
由于
答案 0 :(得分:0)
您的GuiComponent
元素存储在数组的未命名元素中;在阅读JSON数据时,Boost.PropertyTree将"translate" array elements into children of empty nodes。
您可以尝试以下操作:搜索空节点,然后使用equal_range()
方法在每个节点中搜索元素GuiComponent
:
auto array_iter = m_tree.equal_range("");
for (auto i: array_iter) {
auto gui_iter = i->second.equal_range("GuiComponent");
for (auto gui_component: gui_iter) {
// ...
}
}
ptree上的迭代器指向一对,其中第一个元素是节点的名称,第二个元素是ptree。