如何使boost ptree以相同的方式解析xml和json?

时间:2011-07-11 00:08:39

标签: c++ xml json boost boost-propertytree

因此,让我们来看一下经过修改的example代码:

#include <stdio.h>
#include <iostream>
#include <fstream>
#include <boost/foreach.hpp>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>

void load(const std::string &file_path)
{
    using boost::property_tree::ptree;
    ptree pt;
    std::ifstream script;
    script.open(file_path.c_str());
    read_xml(script, pt);
    BOOST_FOREACH(boost::property_tree::ptree::value_type &v,
                  config.get_child("config.servecies"))
    {
        std::cout
            << "First data: " << v.first.data() << std::endl
            << "Second data: " << v.second.data() << std::endl;
    }

}

我尝试使用这样的xml:

<config>
    <servecies>
        <module>file</module>
        <module>Admin</module>
        <module>HR</module>
        <notModule>MyNotModule</notModule>
    </servecies>
</config>

打印:

  

第一个数据:模块
  第二个数据:文件
  第一个数据:模块
  第二个数据:管理员   第一个数据:模块
  第二个数据:人力资源   第一个数据:notModule
  第二个数据:MyNotModule

但是当我尝试这样的json文件(通过this web tool从这个xml创建)时:

{
  "config": {
    "name": "myconfig",
    "servecies": {
      "module": [
        "file",
        "Admin",
        "HR"
      ],
      "notModule": "MyNotModule"
    }
  }
}

打印:

  

第一个数据:模块
  第二个数据:
  第一个数据:notModule
  第二个数据:MyNotModule

如何使boost property_tree在解析XML时在JSON上产生相同的结果?如何找出value_type是否是某种一维数组并通过它迭代?

1 个答案:

答案 0 :(得分:4)

  

如何使boost property_tree在JSON上产生与解析XML相同的结果?

让Boost.PropertyTree输出JSON。然后它就能输入那个JSON文件。

Boost.PropertyTree用于存储属性。这是一种以人类可读格式保存属性的方法,并在以后恢复这些属性。

是制作快速而肮脏的JSON / XML阅读器的一种方法。它以特定格式写入数据,当给定数据读取时,它期望给出的数据是写入的数据。如果你试图将任何旧的JSON推倒,它就不一定会返回合理的信息。它编写有效的JSON,但该JSON的结构特定于PropertyTree,并且读取代码将期望该结构存在。

旁注:我认为Web工具不是很好,因为它将信息添加到原始XML中不存在的JSON文件中。