ServiceBus出列触发消息以azure:message格式解组Golang自定义处理程序

ServiceBus出列触发消息以azure:message格式解组Golang自定义处理程序,azure,go,azure-functions,Azure,Go,Azure Functions,您好,我为Azure函数创建了一个golang自定义处理程序。我有一个队列,其中包含我需要出列和处理的消息。但是,当我试图处理消息时,我无法对其内容进行解组。我遵循这个例子,当然,我将其应用于gingonic,但我仍然无法解决这个问题。出列的消息不应该是JSON格式的,并且很容易反序列化/反序列化吗?似乎是在某种形式的替罪羊串,我不知道如何处理使用戈朗。欢迎任何帮助。 下面是function.json、代码片段和负载外观的日志消息以及错误 { “绑定”:[ { “名称”:“myitem”, “类

您好,我为Azure函数创建了一个golang自定义处理程序。我有一个队列,其中包含我需要出列和处理的消息。但是,当我试图处理消息时,我无法对其内容进行解组。我遵循这个例子,当然,我将其应用于gingonic,但我仍然无法解决这个问题。出列的消息不应该是JSON格式的,并且很容易反序列化/反序列化吗?似乎是在某种形式的替罪羊串,我不知道如何处理使用戈朗。欢迎任何帮助。 下面是function.json、代码片段和负载外观的日志消息以及错误

{
“绑定”:[
{
“名称”:“myitem”,
“类型”:“ServiceBustigger”,
“方向”:“在”,
“队列名称”:“新的MWSG”,
“连接”:“我的连接”,
“访问权限”:“侦听”,
“数据类型”:“字符串”
}
]
}

类型InvokeRequest结构{
数据映射[string]json.RawMessage
元数据映射[字符串]接口{}
}
类型MyItem strutc{
ID字符串`json:“ID”`
IDnum int`json:“id_num”`
Flags映射[string]接口{}`json:“Flags”`
}
func Post(ctx*gin.Context){
var请求调用请求
如果错误:=ctx.BindJSON(&req);错误!=nil{
日志错误(err)
}
日志信息(请求数据[“myitem”])
var myItem myItem
如果错误:=json.Unmarshal([invokeRequest.Data[“myitem”],&myitem);错误!=nil{
日志错误(err)
}
ctx.Status(http.StatusOK)
}
日志


这就是我修复它的方法。我在解组之前添加了一个
strconv.Unquote
。现在可以工作了

myItemStr,:=strconv.Unquote(invokeRequest.Data[“myitem”])
var myItem myItem
如果err:=json.Unmarshal([]字节(myItemStr),&myItem);err!=nil{
日志错误(err)
}

如果您先将其解组为字符串,而不是
json.RawMessage
,然后将该字符串转换为字节片,然后将其解组为
&myItem
?例如,更改数据字段的类型,如
数据映射[string]string
,然后传递
[]字节(invokeRequest.Data[“myItem”])
到json.Unmarshal。它将其转换为字节数组,但无法正确解组。我在下面发布了我使其工作的方法
2021-03-26T15:59:04Z   [Error]   time="2021-03-26T15:59:03Z" level=info msg="map[myitem:\"{\\\"id\\\":\\\"605e04c7fd8f28e17f747952\\\",\\\"id_num\\\":666,\\\"flags\\\":{\\\"eligible\\\":true,\\\"nationwide\\\":true,\\\"persistent_\\\":false}}\"]\"" 
2021-03-26T15:59:04Z   [Error]   time="2021-03-26T15:59:03Z" level=error msg="json: cannot unmarshal string into Go value of type MyItem"