如何将Java序列化数据转换为JSON?适配Ansible部署场景
需求场景
我们维护一款厂商提供的应用,其部分配置以**Java序列化数据(版本5)**的形式存储。经进一步检查,实际内容是一个java.util.ArrayList,包含数十个同一厂商自定义类型vendor.apps.datalayer.client.navs.shared.api.Function的元素。
我们计划使用Ansible部署和配置该应用实例,要求所有配置文件具备可读性,并支持文本化版本控制。为此需要将Java序列化二进制数据解码为可读格式(首选JSON),且该JSON需可转换回原Java序列化格式供应用读取。
现有Java方案的局限性
此前这类问题的公认解决方案基于Java,步骤如下:
- 使用
ObjectInputStream读取Java序列化数据,转换为已知类型并实例化每个对象 - 使用GSON将对象写出为JSON
但该方案对我们并不理想,原因如下:
- 即使无需实例化对象,仍需完全掌握数据中序列化的厂商自定义类型细节
- 我们更倾向于使用可集成到Ansible的Python脚本
尝试Python工具遇到的问题
我们尝试过一款Python模块javaobj-py3,但处理自定义类时需要编写大量自定义Python代码——即便该类的所有字段均为标准Java类型。
我们认为序列化数据本身已包含所有必要信息,除非需要调用类的方法(我们无需此操作),否则无需访问类定义。
内容的提问来源于stack exchange,提问作者Mikhail T.
相关产品推荐
相关产品推荐

