Go 解析msgpack编码的单个片段的msgpack编码片段时为空片段
我试图解码来自服务器的gzip响应,该服务器包含一个msgpack数组或最终被gzip的msgpack数组 为了说明这一点,我的回答如下: GZIPMSGCack[msgpack[],msgpack[],msgpack[] 这是我到目前为止所做的,但是我得到了msgpack错误 msgpack:invalid code=3f解码数组长度,因此我得到的是空片 这个getBytes函数是我从这个 当我在python 3.7中执行相同的操作时,它运行良好:Go 解析msgpack编码的单个片段的msgpack编码片段时为空片段,go,gzip,msgpack,Go,Gzip,Msgpack,我试图解码来自服务器的gzip响应,该服务器包含一个msgpack数组或最终被gzip的msgpack数组 为了说明这一点,我的回答如下: GZIPMSGCack[msgpack[],msgpack[],msgpack[] 这是我到目前为止所做的,但是我得到了msgpack错误 msgpack:invalid code=3f解码数组长度,因此我得到的是空片 这个getBytes函数是我从这个 当我在python 3.7中执行相同的操作时,它运行良好: resp = requests.post(u
resp = requests.post(url, headers=headers, json=payload, stream=True)
datas = msgpack.loads(gzip.decompress(resp.raw.data))
datas = [msgpack.loads(k) for k in datas]
这里缺少什么吗???不要使用[]接口{}类型作为解包类型,而是使用[][]字节。将根消息解组到[][]字节,然后迭代字节片的切片,并解组每个子字节片。您不需要getBytes func
这里有一些例子:
var root [][]byte
if err := msgpack.Unmarshal(bytesSlice, &root); err != nil {
panic(err)
}
for _, childBytes := range root {
var child []interface{}
if err := msgpack.Unmarshal(childBytes, &child); err != nil {
panic(err)
}
_ = child
}
非常感谢,这工作起来很有魅力,还有一个问题是,我的方法不起作用有什么具体原因吗?如果只是为了获取信息,我想先将其解组到[]接口{},然后将其转换为字节呢?实际上,您可以使用[]接口{},但转换为字节的方式应该是byts:=c.[]字节。我认为getBytes func不起作用,因为它将类型元数据和字节数据一起编码,您可以在这里阅读更多关于getBytes func使用的gob包的信息,这很有意义,是的,正如您所说的转换也起作用。
var root [][]byte
if err := msgpack.Unmarshal(bytesSlice, &root); err != nil {
panic(err)
}
for _, childBytes := range root {
var child []interface{}
if err := msgpack.Unmarshal(childBytes, &child); err != nil {
panic(err)
}
_ = child
}