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

Boost ptree node for all children in a json array

本文关键字:ptree 节点 json 数组 提升      更新时间:2023-10-16

我一直在寻找这个问题的答案,但如果以前有人问过这个问题,我找不到任何抱歉的东西。我有以下 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"异常。

任何帮助将不胜感激。

谢谢

您的GuiComponent元素存储在数组的未命名元素中;读取 JSON 数据时,Boost.PropertyTree 会将数组元素"转换"为空节点的子元素。

您可以尝试以下方法:搜索空节点,然后使用 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。