因此,让我们来看一下经过修改的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是否是某种一维数组并通过它迭代?
答案 0 :(得分:4)
如何使boost property_tree在JSON上产生与解析XML相同的结果?
让Boost.PropertyTree输出JSON。然后它就能输入那个JSON文件。
Boost.PropertyTree用于存储属性。这是一种以人类可读格式保存属性的方法,并在以后恢复这些属性。
不是制作快速而肮脏的JSON / XML阅读器的一种方法。它以特定格式写入数据,当给定数据读取时,它期望给出的数据是写入的数据。如果你试图将任何旧的JSON推倒,它就不一定会返回合理的信息。它编写有效的JSON,但该JSON的结构特定于PropertyTree,并且读取代码将期望该结构存在。
旁注:我认为Web工具不是很好,因为它将信息添加到原始XML中不存在的JSON文件中。