我正在使用DialogFlow V2 official GoLang SDK。在我的webhook中,我正在返回一个有效载荷,我正在使用函数GetWebhookPayload()获取。
返回*google_protobuf4.Struct。我想将此结构转换为map[string]interface{}
。这怎么可能?
这是序列化时结构的样子:
"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"
}
]
}
答案 0 :(得分:0)
这可以使用jsonpb来解决。
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
}