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

Java中使用Apache Avro序列化反序列化JSON对象列表时反序列化输出异常问题求助

解决Apache Avro反序列化后输出对象哈希而非内容的问题

首先,你看到的document@3246fb96这类输出,和Avro的序列化/反序列化逻辑无关,这是Java默认toString()方法的行为——当你没有给document类重写toString()时,打印对象就会输出「类名@哈希码」的格式。

核心解决方案:重写document类的toString()方法

给你的document类添加一个自定义的toString()实现,这样打印反序列化后的对象时,就能输出对象的具体字段内容了。示例代码如下:

public class document {
    // 你的字段定义
    private String id;
    private String Status;
    private String siteId;
    private String siteName;

    // 构造方法、Getter/Setter方法(按需补充)

    @Override
    public String toString() {
        return "document{" +
                "id='" + id + '\'' +
                ", Status='" + Status + '\'' +
                ", siteId='" + siteId + '\'' +
                ", siteName='" + siteName + '\'' +
                '}';
    }
}

验证你的序列化逻辑是否正确

你的Avro序列化代码是没问题的——使用ReflectDatumWriter配合DataFileWriter,可以正确将document对象列表序列化到Avro文件中。如果想进一步确认序列化的数据是否正确,可以用Avro官方工具avro-tools来查看Avro文件内容:

  1. 下载对应版本的avro-tools.jar
  2. 执行以下命令将Avro文件转为JSON格式输出:
    java -jar avro-tools-<version>.jar tojson jsonlist.avro
    
    执行后你会看到和原始JSON一致的内容,这就说明序列化是完全正确的。

额外的编码规范建议

  • Java类名建议遵循大驼峰命名法,把document改成Document,这是行业通用的编码规范,能提升代码可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 11:47:48