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

Avro C++如何将解码得到的二进制对象转换为JSON字符串?

Avro C++ 二进制对象转JSON字符串实现方案

Avro C++库内置了JSON序列化工具,无需额外实现,核心是使用jsonEncoder配合encode函数完成转换,以下分两种场景给出具体实现:

场景1:使用代码生成的具体类型对象

如果你是通过Avro代码生成工具(avrogencpp)将Schema编译成了C++类(比如MyRecord),解码得到该类实例后,可按如下方式转换:

#include <avro/Encoder.hh>
#include <avro/ValidSchema.hh>
#include <avro/JsonEncoder.hh>
#include <sstream>

// 假设已完成解码,得到目标对象MyRecord obj,以及对应的ValidSchema schema
std::ostringstream oss;
// 创建JSON编码器
auto jsonEncoder = avro::jsonEncoder(schema);
// 绑定输出流
jsonEncoder->init(oss);
// 编码对象到JSON
avro::encode(*jsonEncoder, obj);
// 刷新缓冲区
jsonEncoder->flush();

// 最终JSON字符串
std::string jsonStr = oss.str();

场景2:使用通用GenericRecord对象

如果是通过通用API解码得到avro::GenericRecord实例,转换逻辑类似:

#include <avro/Generic.hh>
#include <avro/Encoder.hh>
#include <avro/JsonEncoder.hh>
#include <sstream>

// 假设已完成解码,得到avro::GenericRecord record,以及对应的ValidSchema schema
std::ostringstream oss;
auto jsonEncoder = avro::jsonEncoder(schema);
jsonEncoder->init(oss);
avro::encode(*jsonEncoder, record);
jsonEncoder->flush();

std::string jsonStr = oss.str();

注意事项

  • 必须使用ValidSchema:如果你的Schema是未验证的原始Schema对象,需先转换为ValidSchema,示例:avro::ValidSchema validSchema(rawSchema);
  • 复杂结构支持:嵌套Record、枚举、数组、Map等类型,只要Schema定义正确,jsonEncoder会自动处理对应的JSON结构
  • 编译链接:确保编译时包含Avro C++的JSON模块,默认编译配置下该模块已启用,无需额外设置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 00:32:39