问题描述
我正在尝试使用 boost 属性树创建一个 JSON 数组.
I'm trying to create a JSON array using boost property trees.
文档 说:JSON 数组映射到节点.每个元素都是一个名称为空的子节点."
The documentation says: "JSON arrays are mapped to nodes. Each element is a child node with an empty name."
所以我想创建一个空名称的属性树,然后调用 write_json(...)
来获取数组.但是,文档没有告诉我如何创建未命名的子节点.我试过 ptree.add_child("", value)
,但结果是:
So I'd like to create a property tree with empty names, then call write_json(...)
to get the array out. However, the documentation doesn't tell me how to create unnamed child nodes. I tried ptree.add_child("", value)
, but this yields:
Assertion `!p.empty() && "Empty path not allowed for put_child."' failed
文档似乎没有解决这一点,至少我无法弄清楚.有人可以帮忙吗?
The documentation doesn't seem to address this point, at least not in any way I can figure out. Can anyone help?
推荐答案
简单数组:
#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"
}
]
}
希望能帮到你
这篇关于使用属性树在 Boost 中创建 JSON 数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!