boost property tree 解析Json ini

本文详细介绍了PropertyTree数据结构的概念、特点、接口以及如何通过解析器将其与其他树形数据格式(如XML、JSON、INI等)进行转换。重点阐述了其在配置文件存储方面的优势,并提供了实例代码展示其在实际应用中的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

Property Tree(属性树)提供这样一种数据结构 : 存储任意深度嵌套的, 由某种key索引的, 数据树 。每个树上的节点保存它自己的value加上一个它的子节点的key和节点的有序链表。 Property Tree允许通过多个key的连接(表示节点的路径)很方便的访问树上的每一个节点。
另外,库(boost::property_tree) 提供了解析器, 可以将其他利于表示为树格式的数据( 比如 XML , JSON, INI ...) 生成Property Tree
Property Tree 是用途广泛的数据结构, 但它尤其擅长存储配置文件。Property Tree 通过了它自己的,Property Tree特殊的接口,并且每个节点对于子节点而言是STL完整的。
概念上, 一个节点类似于:

struct ptree
{
   data_type data;                         // data associated with the node
   list< pair<key_type, ptree> > children; // ordered list of named children
};

key_typedata_type 可以被配置成各种类型,但是通常是std::string 或者 std::wstring, 解析器仅能为这两种树工作。

实用接口

毫无疑问, boost总是会提供最方便的接口。

解析/ 写回 Json
  • read_json( XXX , ptree )
  • write_json( XXX , ptree)
    • XXX 可以是一个ostringstream 流
    • XXX 可以是一个文件名
增删查
  • add_child ( path , ptree ) 向一个ptree添加子树。
  • add_value(Type t) 为一个ptree添加数据
  • erase( iterater ) 删除子树。

  • get_child( path) 获得子树

  • get_value() 获得自己的数据
  • get(path) 获得子树的数值

  • get_optional 处理空值

遍历

像map一样遍历 key 是string value 是 ptree

实例

int main(){
    boost::property_tree::ptree pt;
    boost::property_tree::ini_parser::read_ini("tt.ini",pt);
    boost::property_tree::ptree tesss = pt.get_child("tesss");
    std::cout<<tesss.get<std::string>("test") <<"\n";
    for(auto & pair : tesss){
        std::cout<<pair.first<<" = " <<pair.second.get_value<std::string>()<<std::endl;
    }
    return 0;
}

读取 :

[tesss]
test=Hello ini
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值