为json数组中的所有子节点提升ptree节点

时间:2014-12-15 12:58:39

标签: c++ json boost boost-propertytree

我一直在寻找这个问题的答案,但如果之前有人问过这个问题,就不能发现任何事情。我有以下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”异常。

非常感谢任何帮助。

由于

1 个答案:

答案 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。