我正在尝试使用boost属性树创建一个JSON数组。

documentation说:“JSON数组被映射到节点。每个元素都是一个空名称的子节点。”

因此,我想用空名称创建一个属性树,然后调用write_json(...)将数组取出。但是,文档没有告诉我如何创建未命名的子节点。我尝试了ptree.add_child("", value),但这产生了:

Assertion `!p.empty() && "Empty path not allowed for put_child."' failed

该文档似乎没有解决这一点,至少我无法确定。有人可以帮忙吗?

最佳答案

简单数组:

#include <boost/property_tree/ptree.hpp>
using boost::property_tree::ptree;

ptree pt;
ptree children;
ptree child1, child2, child3;

child1.put("", 1);
child2.put("", 2);
child3.put("", 3);

children.push_back(std::make_pair("", child1));
children.push_back(std::make_pair("", child2));
children.push_back(std::make_pair("", child3));

pt.add_child("MyArray", children);

write_json("test1.json", pt);

结果是:
{
    "MyArray":
    [
        "1",
        "2",
        "3"
    ]
}

object 上方的阵列:
ptree pt;
ptree children;
ptree child1, child2, child3;


child1.put("childkeyA", 1);
child1.put("childkeyB", 2);

child2.put("childkeyA", 3);
child2.put("childkeyB", 4);

child3.put("childkeyA", 5);
child3.put("childkeyB", 6);

children.push_back(std::make_pair("", child1));
children.push_back(std::make_pair("", child2));
children.push_back(std::make_pair("", child3));

pt.put("testkey", "testvalue");
pt.add_child("MyArray", children);

write_json("test2.json", pt);

结果是:
{
    "testkey": "testvalue",
    "MyArray":
    [
        {
            "childkeyA": "1",
            "childkeyB": "2"
        },
        {
            "childkeyA": "3",
            "childkeyB": "4"
        },
        {
            "childkeyA": "5",
            "childkeyB": "6"
        }
    ]
}

希望这可以帮助

07-24 09:46
查看更多