我如何使用json解析器的boost property_tree创建空数组节点
How can I create empty array node using boost property_tree of json parser
我试图在json中创建一个数组节点,其输出如下:
{
node: ["12", "13"]
}
但是当数组为空时,它将输出如下内容:
{
node: ""
}
这不是我想要的,我需要这个:
{
node: []
}
我该怎么做呢?我不需要用双引号(")来括数字。有人能帮忙吗?
我的代码如下:
boost::property_tree::ptree pt;
boost::property_tree::ptree array;
for (vector<int>::const_iterator iter = v.begin();
iter != v.end();
++iter)
{
boost::property_tree::ptree node;
node.put("code", *iter);
array.push_back(std::make_pair("", node));
}
pt.add_child("array", array);
PSA Boost 1.75.0引入Boost JSON;Live Demo
std::cout << json::object{{"node", json::array{}}};
Boost没有JSON库。它有一个属性树(想想:分层配置格式)库。
文档:http://www.boost.org/doc/libs/1_58_0/doc/html/property_tree/parsers.html property_tree.parsers.json_parser
它特别说明了一些东西没有得到很好的支持:
- JSON中的
- 数组是一个hack(你不能表示空数组)
- 所有类型信息丢失(一切都需要JSON字符串)
这适合Boost PropertyTree的预期应用程序域。如果不适合您的问题,请使用JSON库。
这个答案假设,在稍后的阶段,您将创建属性树的字符串。我找到了一个解决这种情况的方法。而不是创建
{
"node": ""
}
可以很容易地创建
{
"node": [""]
}
通过 ptree parent_tree, children, child;
children.push_back(std::make_pair("", child));
pt.add_child("node", children);
之后,当您有json的字符串表示时,您可以将字符[""]
替换为[]
。为此,您只需执行以下命令:
#include <boost/algorithm/string.hpp>
boost::replace_all(json_string, "[""]", "[]");
这样,您将得到一个包含
的字符串。{
"node": []
}
相关文章:
- 使用 boost::p roperty_tree::p tree 如何获取特定键的值
- C++模板是否有助于定义单行'property'成员?
- 'QML Connections: Cannot assign to non-existent Property'尽管情况正好相反
- Boost R-Tree中的最小边界矩形计算
- C++ EXC_BAD_ACCESS (Binary Tree)
- Boost::p tree - 访问列表中包含的属性树节点
- Deserilizing n-ary tree
- Balancing KD Tree
- MsiViewFetch "SELECT * FROM `Property`"成功,但返回"Incorrect function." C++
- 如何填充'Tree'结构'Declaratively'
- 为什么qmap使用skiplist而不是ob rb-tree
- Maven User-Agent property and pluginRepository
- 避免在节点中添加重复的子级,使用 Kasper Peeters 的 Tree.hh 库
- SPOJ GSS1 WA - Segment tree
- Flattening the tree
- C++ AVL Tree Deletion
- Boost/Property树确定值类型
- RedBlack and AVL tree c++
- C++中已经有为 LinkedList、HashMap、Tree 等编写的类
- boost::p roperty_:tree - 解析和处理数据