2

単体テストでthriftオブジェクトを作成する必要がある場合があります。次のようなJavaコードを使用して手動でオブジェクトを作成することでそれを行うことができます:

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

しかし、これは便利ではありません。読みやすいテキストでオブジェクトを作成する方法を探しています。

を使用してthriftオブジェクトをJSONに変換しTSimpleJSONProtocol、次のような非常に読みやすいJSON文字列を取得できます。

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

しかし、問題はTSimpleJSONProtocol書き込みのみであり、thrift はそれを読み取って のインスタンスを構築することはできませんMyObj

TJSONProtocolシリアライズとデシリアライズをサポートする がありますが、生成された JSON を読み取ることはできません。非常に単純化された JSON 形式を使用しており、ほとんどのフィールド名が欠落しています。テストで構築するのは不便です。

thrift オブジェクトを読み取り可能な文字列に変換し、元に戻す方法はありますか? 逆変換をサポートしている場合TSimpleJSONProtocol、これはまさに私が探しているものです

4

1 に答える 1

2

Thrift の主な目標は、効率的なシリアル化と RPC メカニズムを提供することです。あなたが望むのは、少なくとも部分的にはそれに反するものです。人間が読めるデータ構造と機械の処理効率はかなり相反する目標であり、Thrift は前者よりも後者を好みます。

TSimpleJsonとのプロトコル、およびその長所と短所については既に知っているTJsonので、追加することはあまりありません。唯一言えることは、Thrift のプロトコル/トランスポート スタックは十分に単純であるということです。

このシンプルさにより、多くの、または過度に複雑な作業を行うことなく、特定のニーズに基づいて別のプロトコルを追加できます。XML プロトコルを (誰かがそのようなブロートウェアを本当に必要としているのであれば) 短時間で作成することさえできるでしょう。

特にあなたの特定のケースに対する唯一の注意点は、Thrift が data をデシリアライズするためにフィールド ID を必要とするという事実です。したがって、それらをデータに格納するか、フィールド名と構造体名に基づいてそのフィールド ID を取得できる他のメカニズムが必要です。

于 2015-07-31T22:05:19.813 に答える