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

C++中JSON类型转换报错:无法将std::vector<json_t*>转为const json_t*

问题解决:无法将std::vector<json_t*>转换为JSON数组

错误原因

你犯了两个关键错误:

  1. 类型不匹配:json_deep_copy的参数要求是const json_t*(标准JSON对象/数组),但你传入了std::vector<json_t*>——这是C++容器类型,和libjson-c的JSON对象完全不是同一类型。
  2. JSON结构错误:要表示多个disk的集合,你需要创建libjson-c的JSON数组对象,而不是用std::vector存储单个JSON对象。

修正代码

直接使用libjson-c的数组API实现需求:

// 创建JSON数组对象,用于存储多个disk条目
json_t *disks_array = json_array();

// 创建单个disk的JSON对象
json_t *disks_obj = json_object();
string src = "<disk-id>";
string baseSnapshotID = "<snapID>";
json_object_set_new(disks_obj, "source", json_string(src.c_str()));
json_object_set_new(disks_obj, "baseSnapshotID", json_string(baseSnapshotID.c_str()));

// 将单个disk对象添加到数组中(此函数会接管disks_obj的所有权,无需手动释放)
json_array_append_new(disks_array, disks_obj);

// 现在可以正确将数组设置到environment_obj中,json_deep_copy参数类型匹配
json_object_set_new(environment_obj, "disks", json_deep_copy(disks_array));

// 内存管理:如果使用了json_deep_copy,原数组disks_array需要手动释放
json_decref(disks_array);

补充说明

  • json_array():创建一个空的JSON数组,对应JSON语法中的[]结构。
  • json_array_append_new:将JSON对象添加到数组末尾,同时转移对象的所有权,避免重复释放导致的内存错误。
  • 内存泄漏防范:libjson-c使用引用计数管理内存,不再使用的JSON对象必须调用json_decref释放。如果不需要深拷贝,直接传disks_array给json_object_set_new即可,此时environment_obj会接管数组的所有权,无需手动释放disks_array。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 02:17:19