2016-08-12 10 views
0

Task.thrift (スリフトバージョン0.9.3)番号でのJavaマーシャル列挙型用のApacheスリフトコードを生成Golangの列挙型を使用して、使いやすいJSON形式でThrift構造体を保存するにはどうすればよいですか?

enum AttributeApp { 
    a = 1, 
    b = 2, 
    c = 3 
} 

typedef i32 attrTypeId 

struct Task { 
    1: required attrTypeId type_id, 
    2: required list<AttributeApp> app_to, 
} 

$倹約-r --gen javaのTask.thrift

TSerializer serializer = new TSerializer(new TSimpleJSONProtocol.Factory()); 
String json = serializer.toString(task); 
Util.writeLog("task.json", json); 

番号の代わりに、名前でJSONマーシャル列挙してGolangのためのApacheスリフトコードを生成するには?

この例では、文字列で列挙型を作るTask.thrift

を行く--gen -r

$倹約:

bt, err := json.Marshal(task) 
if err != nil { 
    return err 
} 
err = ioutil.WriteFile("task.json", bt, 0666) 

この例では、数字で列挙型を作るが、中に2つの余分な数字を追加jsonの任意のリスト:

transport := thrift.NewTMemoryBufferLen(1024) 
protocol := thrift.NewTSimpleJSONProtocolFactory().GetProtocol(transport) 
ts := &thrift.TSerializer{transport, protocol} 
bt, err := ts.Write(task) 
if err != nil { 
    return err 
} 
err = ioutil.WriteFile("task.json", bt, 0666) 

答えて

0

代わりにTJSONProtocolを使用してください。互換性のあるJSONベースのデータ形式です。

TSimpleJSONProtocol is not intended to be used as a serialization format, at least not when you plan to read it back into your program using Thrift

TSimpleJSONProtocolがJavaとGoの出力が異なる場合は、矛盾があり、適切なテストケースを含むJIRAチケットを提出することを検討している可能性があります。

+0

ユーザーフレンドリーなJSON形式のシリアル化に興味があります。 TJSONProtocolはうまく動作しますが、ユーザーフレンドリーではありません。 –

0

削除してthisを削除し、thrift-0.9.3を再作成し、json.Marshal/Unmarshalを使用します。

関連する問題