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

标签 java json thrift thrift-protocol

有时,我们需要在单元测试中创建一些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 协议(protocol)及其优缺点,因此无需添加太多内容。唯一要说的是:Thrift 的协议(protocol)/传输栈足够简单。

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

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

关于java - 如何将 thrift 对象转换为可读字符串并将其转换回来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31753659/

相关文章:

java - HBase alter table 命令失败并显示 "ERROR: d != java.lang.String"

Java Swing - 如何向下滚动 JTextArea?

java - libGDX Actor 未接收输入

javascript - 从serializeArray创建嵌套对象

ios - 从 nsdictionary 填充 uitableview

java - 如何使用 smslib 中的队列消息传递方法系列?

json - API 请求和响应

asynchronous - 节俭 + Tornado + 异步

node.js - 从 NodeJS 连接到 Accumulo

c++ - 在 Windows 中从 C++ 应用程序调用 Thrift