C++中JSON类型转换报错:无法将std::vector<json_t*>转为const json_t*
问题解决:无法将std::vector<json_t*>转换为JSON数组
错误原因
你犯了两个关键错误:
- 类型不匹配:
json_deep_copy的参数要求是const json_t*(标准JSON对象/数组),但你传入了std::vector<json_t*>——这是C++容器类型,和libjson-c的JSON对象完全不是同一类型。 - 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
相关产品推荐
相关产品推荐

