我试图创建一个JSON数组使用boost属性树。
documentation说:“JSON数组被映射到节点,每个元素都是一个空的名字的子节点。
所以我想创建一个具有空名称的属性树,然后调用write_json(…)来获取数组。但是,文档不告诉我如何创建未命名的子节点。我试过ptree.add_child(“”,值),但这产生:
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" ] }
对象上的数组:
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" } ] }
希望这可以帮助