如何将 thrift 对象转换为可读字符串并将其转换回来?

How to convert thrift objects to readable string and convert it back?

有时,我们需要在单元测试中创建一些thrift对象。我们可以使用 Java 代码手动创建对象,例如:

MyObj myObj = new MyObj();
myObj.setName("???");
myObj.setAge(111);

但是这不方便。我正在寻找一种方法来创建带有一些可读文本的对象。

我们可以使用 TSimpleJSONProtocol 将 thrift 对象转换为 JSON,并获得可读性很好的 JSON 字符串,例如:

{ "name": "???", "age": 111 }

但问题是TSimpleJSONProtocol是只写的,thrift无法读回它来构造MyObj的实例。

虽然有一个TJSONProtocol支持序列化和反序列化,但是生成的JSON不可读,它使用非常简化的JSON格式和大部分字段名缺失。不方便在测试中构造它。

有什么方法可以将thrift 对象转换为可读字符串并且还可以将其转换回来吗?如果TSimpleJSONProtocol支持转换回来,这正是我要找的

Thrift 的主要目标是提供高效 序列化和 RPC 机制。你想要的是 - 至少部分 - 与此相反的东西。人类可读的数据结构和机器处理效率在很大程度上是相互矛盾的目标,而 Thrift 更倾向于后者而不是前者。

您已经了解了 TSimpleJsonTJson 协议以及它们的优缺点,因此没有太多要补充的了。唯一要说的是:Thrift 的 protocol/transport 堆栈足够简单。

这种简单性使得无需太多或过于复杂的工作就可以根据您的特定需求添加另一个协议。人们甚至可以在短时间内编写一个 XML 协议(如果有人真的想要这样的过时软件)。

唯一需要注意的是,特别是针对您的具体情况,Thrift 需要字段 ID 来反序列化数据。因此,您要么需要将它们存储在数据中,要么需要一些其他机制能够根据字段和结构名称检索该字段 ID。