如何在boost property tree中编写嵌套列表并将其导出为json格式
Boost 生成嵌套JSON数组实现方案
你需要的{"matrix": [[0.0, 0.0], [0.0, 0.0]]}结构可以通过两种Boost常用JSON处理组件实现,以下是具体代码:
使用Boost.PropertyTree实现
你查阅的json_parser属于Boost.PropertyTree组件,该组件本身不是专门为JSON设计,数组统一以空字符串作为子节点key的形式存储,嵌套数组只要嵌套遵循该规则构造即可:
#include <iostream> #include <boost/property_tree/ptree.hpp> #include <boost/property_tree/json_parser.hpp> using namespace boost::property_tree; int main() { ptree root; ptree matrix_arr; // 存储外层数组 // 构造2行2列的嵌套数组 for (int i = 0; i < 2; ++i) { ptree row_arr; // 存储内层每行的数组 for (int j = 0; j < 2; ++j) { ptree val_node; val_node.put_value(0.0); // 数组元素固定使用空字符串作为key row_arr.push_back(std::make_pair("", val_node)); } // 外层数组的元素是内层数组,同样用空字符串作为key matrix_arr.push_back(std::make_pair("", row_arr)); } root.add_child("matrix", matrix_arr); // 第三个参数设为false,避免数字被自动加引号 write_json(std::cout, root, false); return 0; }
使用Boost.JSON实现
如果你的项目允许使用专门的JSON处理组件,更推荐用Boost.JSON,原生支持所有JSON类型,代码更简洁,没有额外适配成本:
#include <iostream> #include <boost/json.hpp> using namespace boost::json; int main() { object root; array matrix; for (int i = 0; i < 2; ++i) { array row; row.emplace_back(0.0); row.emplace_back(0.0); matrix.emplace_back(std::move(row)); } root["matrix"] = std::move(matrix); // 直接序列化输出 std::cout << serialize(root) << std::endl; return 0; }
内容的提问来源于stack exchange,提问作者HiroIshida
相关产品推荐
相关产品推荐

