Go 协议缓冲区序列化
我正在使用。在我的webhook中,我返回一个有效负载,我使用函数获取它 这又回来了。我想把这个结构转换成一个Go 协议缓冲区序列化,go,protocol-buffers,dialogflow-es,Go,Protocol Buffers,Dialogflow Es,我正在使用。在我的webhook中,我返回一个有效负载,我使用函数获取它 这又回来了。我想把这个结构转换成一个map[string]接口{}。这怎么可能 这是序列化结构时的外观: "payload": { "fields": { "messages": { "Kind": { "ListValue": { "values": [
map[string]接口{}
。这怎么可能
这是序列化结构时的外观:
"payload": {
"fields": {
"messages": {
"Kind": {
"ListValue": {
"values": [
{
"Kind": {
"StructValue": {
"fields": {
"title": {
"Kind": {
"StringValue": "Hi! How can I help?"
}
},
"type": {
"Kind": {
"StringValue": "message"
}
}
}
}
}
}
]
}
}
}
}
我本质上需要的是将其序列化为:
"payload": {
"messages": [
{
"title": "Hi! How can I help?",
"type": "message"
}
]
}
这可以通过以下方法解决
实现解组器接口以从json获取所需的数据返回的数据可以是任何格式没有结构
message
键和StringValue
键不会更改,对吗?messages
不会更改它将始终包含未知对象的列表使用接口{}并从deep中获取值,直到找不到字符串为止
package main
import (
"bytes"
"encoding/json"
"github.com/golang/protobuf/jsonpb"
)
func main() {
...
payload := qr.GetWebhookPayload()
b, marshaler := bytes.Buffer{}, jsonpb.Marshaler{}
if err := marshaler.Marshal(&b, payload.GetFields()["messages"]); err != nil {
// handle err
}
msgs := []interface{}{}
if err := json.Unmarshal(b.Bytes(), &msgs); err != nil {
// handle err
}
// msgs now populated
}