我找到了解决办法...不是特别优雅,但比以前更好。
foobar.thrift:
struct Object {
1: i32 num1 = 0,
2: i32 num2,
}
typedef list<Object> ObjectList
app.py:
import thriftpy
from thriftpy.transport import TMemoryBuffer
from thriftpy.protocol.binary import write_val
foobar = thriftpy.load('foobar.thrift')
def write_list(trans, val, list_type):
ttype, spec = list_type
write_val(trans, ttype, val, spec=spec)
val = [foobar.Object(num1=8, num2=12)]
trans = TMemoryBuffer()
write_list(trans, val, foobar.ObjectList)
encoded_list = bytes(trans.getvalue())
我想看到标准节俭实现做什么。它并没有让它变得更容易。它不会产生对ObjectList
东西所以为了达到同样的,你需要做的thrift -gen py foobar.thrift
,然后:
app.py:
import sys
sys.path.append('gen-py')
from foobar.ttypes import *
from thrift.protocol import TBinaryProtocol
from thrift.transport import TTransport
def write_list(trans, val):
protocol = TBinaryProtocol.TBinaryProtocol(trans)
protocol.writeListBegin(TType.STRUCT, len(val))
for values in val:
values.write(protocol)
protocol.writeListEnd() # This is a nop
val = [Object(num1=8, num2=12)]
trans = TTransport.TMemoryBuffer()
write_list(trans, val)
encoded_list = trans.getvalue()
你将如何在定义“最佳途径”这个问题的背景?你为什么要删除标题呢? IOW,**你想实现什么**? – JensG
有一个现有的API需要一个Thrift对象数组,我想使用它。 API是用Java实现的,它似乎支持读取对象列表(参见[这里](https://github.com/openzipkin/zipkin/blob/fe14098030ab7ee5e305376c232ac72d852890b5/zipkin/src/main/java/zipkin/internal/ThriftCodec)。 java#L409)) – neverlastn