【问题标题】:How to use boost::property_tree to parse JSON with array root如何使用 boost::property_tree 解析带有数组根的 JSON
【发布时间】:2015-01-12 06:13:09
【问题描述】:

如何使用 Boost.PropertyTree 从以数组为根节点的 JSON 中获取数据?

[
  {
      "ID": "cc7c3e83-9b94-4fb2-aaa3-9da458c976f7",
      "Type": "VM"
  }
]

【问题讨论】:

    标签: c++ json boost boost-propertytree


    【解决方案1】:

    数组元素只是属性树的键名为“”的值:

    for (auto& array_element : pt) {
        for (auto& property : array_element.second) {
            std::cout << property.first << " = " << property.second.get_value<std::string>() << "\n";
        }
    }
    

    打印

    ID = cc7c3e83-9b94-4fb2-aaa3-9da458c976f7
    Type = VM
    

    Live On Coliru

    #include <boost/property_tree/ptree.hpp>
    #include <boost/property_tree/json_parser.hpp>
    #include <iostream>
    
    using namespace boost::property_tree;
    
    int main()
    {
        std::istringstream iss(R"([
        {
            "ID": "cc7c3e83-9b94-4fb2-aaa3-9da458c976f7",
            "Type": "VM"
        }
        ]
        )");
    
        ptree pt;
        json_parser::read_json(iss, pt);
    
        for (auto& array_element : pt) {
            for (auto& property : array_element.second) {
                std::cout << property.first << " = " << property.second.get_value<std::string>() << "\n";
            }
        }
    }
    

    【讨论】:

    • 如我所见,我不能使用文档pt.get&lt;std::string&gt;("key"); 中的内容,因为根数组没有键,我必须在数组上使用迭代,对吗?
    • 这是可能的。这只是我尝试的第一件事。似乎存在这种限制:无论如何你将如何处理重复的键 - 更不用说重复的“”键了:)
    • @sehe 是否可以使用 boost ptree 在 JSON 中找出孩子?
    • @Milind ?也许你可以在主站点上问一个(更清晰的)问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 2016-01-21
    • 2011-04-14
    • 2023-01-07
    相关资源
    最近更新 更多