You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用C++ Boost JSON库从已有数据生成指定结构的JSON文件?

用 Boost.PropertyTree 生成指定结构的 JSON 文件

核心注意点

Boost.PropertyTree 没有原生数组类型,要生成 JSON 数组,必须对同一个键重复插入子节点——比如要得到"Wheel": [...]的数组结构,就需要多次向Wheels节点插入键为"Wheel"的子树。

补全后的完整代码

#include "boost/property_tree/ptree.hpp"
#include "boost/property_tree/json_parser.hpp"
#include <string>
#include <iostream>

using namespace std;
using boost::property_tree::ptree;

struct wheel
{
    string start_pos;
    string end_pos;
};

struct brake
{
    string start_pos;
    string midl_pos;
};

// 辅助函数:将wheel结构体转为ptree节点
ptree wheel_to_ptree(const wheel& w) {
    ptree pt;
    pt.put("start_pos", w.start_pos);
    pt.put("end_pos", w.end_pos);
    return pt;
}

// 辅助函数:将brake结构体转为ptree节点
ptree brake_to_ptree(const brake& b) {
    ptree pt;
    pt.put("start_pos", b.start_pos);
    pt.put("midl_pos", b.midl_pos);
    return pt;
}

int main() 
{
    // 初始化业务数据
    wheel w1{"10", "25"};
    wheel w2{"22", "78"};
    brake b1{"10", "25"};

    // 构建根节点与track层级节点
    ptree root;
    ptree track_node;

    // 构建Wheels节点及下属Wheel数组
    ptree wheels_node;
    wheels_node.push_back(make_pair("Wheel", wheel_to_ptree(w1)));
    wheels_node.push_back(make_pair("Wheel", wheel_to_ptree(w2)));
    track_node.put_child("Wheels", wheels_node);

    // 构建Brakes节点及下属Brake数组
    ptree brakes_node;
    brakes_node.push_back(make_pair("Brake", brake_to_ptree(b1)));
    track_node.put_child("Brakes", brakes_node);

    // 将track节点挂载到根节点
    root.put_child("track", track_node);

    // 输出JSON到文件(第三个参数为true时开启格式化输出)
    write_json("output.json", root, true);

    // 也可直接输出到控制台
    // write_json(cout, root, true);

    return 0;
}

关键步骤说明

  1. 结构体转ptree:通过辅助函数将自定义结构体封装为ptree节点,避免重复代码,提升可读性。
  2. 生成数组逻辑:调用push_back(make_pair("键名", 子ptree))重复插入同名键,Boost会自动将其解析为JSON数组。
  3. 层级构建:从最内层的Wheel/Brake节点开始,逐层向上构建到track节点,最终挂载到根节点。
  4. JSON输出:write_json支持输出到文件或标准输出,第三个参数控制是否开启格式化排版。

最终生成的JSON结构

运行代码后会生成完全符合需求的JSON文件:

{
    "track": {
        "Wheels": {
            "Wheel": [
                {
                    "start_pos": "10",
                    "end_pos": "25"
                },
                {
                    "start_pos": "22",
                    "end_pos": "78"
                }
            ]
        },
        "Brakes": {
            "Brake": [
                {
                    "start_pos": "10",
                    "midl_pos": "25"
                }
            ]
        }
    }
}

内容的提问来源于stack exchange,提问作者Nindzzya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 02:10:39