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

如何将对象序列化为JSON Lines?实现跳过序列化失败的单个事件

解决方案

修改序列化方法,将异常捕获逻辑移至循环内部,实现单个事件序列化失败时跳过,保留正常事件:

private ByteBufferOutputStream serializeEvents(List<Event> events) {
    final ByteBufferOutputStream outputStream = new ByteBufferOutputStream(1024, true, false);
    boolean hasSuccessfulEvents = false;

    for (Event event : events) {
        try {
            Json.writeValueAsToOutputStream(event, outputStream);
            outputStream.write('\n');
            hasSuccessfulEvents = true;
        } catch (Exception e) {
            // 建议添加事件唯一标识(如eventId)到日志,方便排查问题
            log.error("序列化单个Event失败,已跳过该事件", e);
        }
    }

    // 无成功序列化事件时返回null,避免上传空文件
    return hasSuccessfulEvents ? outputStream : null;
}

关键改动说明

  • 局部异常捕获:把原有的外层try-catch移到循环内部,每个Event单独处理,序列化失败仅记录日志并跳过当前事件,不中断整个列表的处理
  • 空结果判断:新增hasSuccessfulEvents标记,确保只有存在有效序列化内容时才返回流,避免上传空文件(与原有上传逻辑兼容)
  • 日志优化:建议在日志中加入事件的唯一标识(如event.getId()),便于后续定位具体失败事件

上传代码无需修改

原有上传逻辑中判断serializedEvent != null才执行上传,修改后的序列化方法会在无有效内容时返回null,保持原有逻辑的一致性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 21:10:52