c++ - 为 json 数组中的所有 child boost ptree 节点

标签 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”异常。

如有任何帮助,我们将不胜感激。

谢谢

最佳答案

您的 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。

关于c++ - 为 json 数组中的所有 child boost ptree 节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27484652/

相关文章:

c++ - Windows Media Foundation:IMFSourceReader::SetCurrentMediaType 执行时间问题

c++ - SCHED_RR 线程上的 Posix 计时器正在使用 100% CPU

java - 通过调用AJAX获取JSON实例到jsp

c++ - 我如何构造一个仿函数以用于像 boost 的 brent_find_minima 这样的算法?

c++ - C++重载运算符<用于结构:错误的参数太多

c++从子对象中获取父对象的实例

python - View 函数中将查询集类型转换为 list() 错误 - 适用于 shell

java - 使用 LocalDateTime 字段将 JSON 反序列化为对象

c++ - Boost.Asio Win32 Windows 应用程序

c++ - 使用 bcp 获取可构建的 Boost 提取