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

使用nlohmann/json从std::vector生成指定结构JSON文件的问题

解决方案与代码修正

核心思路

完全可以通过单个nlohmann::json对象生成目标结构——只需先创建根JSON对象,再将std::vector<Car>序列化为JSON数组,最后将该数组绑定到myCars层级即可。关键是要确保自定义Car类型能被nlohmann/json库正确序列化。

完整代码示例

1. 定义自定义类型与序列化逻辑

#include <nlohmann/json.hpp>
#include <vector>
#include <fstream>
#include <string>

using json = nlohmann::json;

// 自定义Car类
struct Car {
    std::string brand;
    std::string model;
    int production_year;
};

// 重载to_json函数,让库能识别并序列化Car对象
void to_json(json& j, const Car& car) {
    j = json{
        {"brand", car.brand},
        {"model", car.model},
        {"productionYear", car.production_year}
    };
}

2. 生成目标结构JSON

int main() {
    // 构造测试用的车辆列表
    std::vector<Car> car_list = {
        {"Tesla", "Model 3", 2024},
        {"BMW", "X5", 2023},
        {"Audi", "A4", 2022}
    };

    // 构建包含myCars层级的根JSON对象
    json root_json;
    root_json["myCars"] = car_list; // 库自动将vector<Car>转为JSON数组

    // 输出到文件(带4空格缩进,提升可读性)
    std::ofstream out_file("my_cars.json");
    out_file << root_json.dump(4);

    return 0;
}

关键细节说明

  • 自定义类型序列化:必须实现to_json重载函数,这是nlohmann/json处理自定义对象的标准约定,库会自动递归处理std::vector这类容器的序列化。
  • 层级构建:直接给根JSON对象的myCars键赋值std::vector<Car>即可,无需手动遍历数组元素添加,库会自动完成转换。
  • 常见问题排查:如果之前代码无法生成目标结构,大概率是遗漏了to_json重载,或者错误地直接序列化vector而没有将其放入myCars键下。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 12:33:24