如何解决使用Boost :: Ptree的JSON数组
如何创建可以编码为JSON以下的boost ptree?即,我想知道如何在boost ptree中表示JSON对象的JSON数组。
[
{"3":"SomeValue"},{"40":"AnotherValue"},{"23":"SomethingElse"},{"9":"Anotherone"},{"1":"LastOne"}
]
我必须说以下链接没有回答: Creating JSON arrays in Boost using Property Trees
解决方法
链接确实回答了它。所有答案都清楚表明您应该使用push_back
(实际上是insert
),而不是put_child
。
您还必须阅读“如何制作数组”的知识,并认识到 您不能将数组作为文档根目录 。
这是Boost Ptree 不是 JSON库的事实的一个征兆。这是一个属性树库,并且仅支持属性树。这些限制已记录在案:
演示
假设您确实不需要数组作为文档根目录,这是您可以做的最好的事情:
#define BOOST_BIND_GLOBAL_PLACEHOLDERS
#include <boost/property_tree/json_parser.hpp>
#include <iostream>
using boost::property_tree::ptree;
int main() {
ptree arr;
for (auto [k,v]: { std::pair
{"3","SomeValue"},{"40","AnotherValue"},{"23","SomethingElse"},{"9","AnotherOne"},{"1","LastOne"} })
{
ptree element;
element.put(k,v);
arr.push_back({"",element});
}
// can't have array at root of doc...
ptree doc;
doc.put_child("arr",arr);
write_json(std::cout,doc);
}
打印
{
"arr": [
{
"3": "SomeValue"
},{
"40": "AnotherValue"
},{
"23": "SomethingElse"
},{
"9": "AnotherOne"
},{
"1": "LastOne"
}
]
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。