【问题标题】:How to convert thrift objects to readable string and convert it back?如何将节俭对象转换为可读字符串并将其转换回来?
【发布时间】:2015-10-23 13:47:49
【问题描述】:

有时,我们需要在单元测试中创建一些 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 支持转换回来,这正是我正在寻找的

【问题讨论】:

    标签: java json thrift thrift-protocol


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 也许最好的办法还是用代码用构造函数来构造对象。至少我们有类型安全
    猜你喜欢
    • 2016-11-13
    • 2015-07-21
    • 2019-12-17
    • 2011-09-09
    • 1970-01-01
    • 2013-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多