简体   繁体   English

C ++ boost ptree重命名密钥

[英]C++ boost ptree rename key

In a boost property tree, I would like to rename a key such as abc2 to abc3 . 在boost属性树中,我想将诸如abc2类的密钥重命名为abc3

One method is to remove the node and put its copy with another name. 一种方法是删除节点并将其副本放在另一个名称上。 The problem is that the node is placed at the end of its other siblings. 问题是节点位于其他兄弟节点的末尾。 I prefer to keep the order. 我更喜欢保留订单。 How can I fix this code? 我该如何修复此代码?

#include <iostream>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
#include <boost/algorithm/string/predicate.hpp>

using namespace boost::property_tree;

void print(const ptree &p)
{
    json_parser::write_json(std::cout, p);
}

int main()
{
    ptree pt0;

    pt0.put("a.b.c1",4);
    pt0.put("a.b.c2.e1",4);
    pt0.put("a.b.c4",2);
    pt0.put("a.d",4);
    pt0.put("k.m",4);
    pt0.put("k.n.as",4);

    std::string key_parent="a.b";
    std::string full_key="a.b.c2";
    std::string full_key2="a.b.c3";
    ptree node=pt0.get_child(full_key);
    pt0.get_child(key_parent).erase("c2");
    pt0.put_child(full_key2,node);

    print(pt0);

    return 0;
}

Results :( 结果:(

// before:
{
    "a": {
        "b": {
            "c1": "4",
            "c2": {
                "e1": "4"
            },
            "c4": "2"
        },
        "d": "4"
    },
    "k": {
        "m": "4",
        "n": {
            "as": "4"
        }
    }
}


// after:
{
    "a": {
        "b": {
            "c1": "4",
            "c4": "2",
            "c3": {
                "e1": "4"
            }
        },
        "d": "4"
    },
    "k": {
        "m": "4",
        "n": {
            "as": "4"
        }
    }
}

You can use insert and iterator to do this. 您可以使用insertiterator来执行此操作。

ptree &child = pt0.get_child("a.b");
ptree::iterator it = child.to_iterator(child.find("c2"));
child.insert(it, make_pair("c3", it->second));
child.erase(it);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM