AWS EventBridge PutEvent 详细信息格式错误
AWS EventBridge PutEvent Detail Malformed
我已经尝试了两个 AWS Go SDK 的两个版本,每次我都收到一条错误消息,指出 Details 字段格式错误。详细信息字段接受 JSON 字符串。
在 SDK V2 中,您基本上有一个事件结构
type Event struct {
Details []struct {
Key string `json:"Key"`
Value string `json:"Value"`
} `json:"Details"`
DetailType string `json:"DetailType"`
Source string `json:"Source"`
}
示例然后使用此代码构建 JSON 字符串
myDetails := "{ "
for _, d := range event.Details {
myDetails = myDetails + "\"" + d.Key + "\": \"" + d.Value + "\","
}
myDetails = myDetails + " }"
然后进行 api 调用
input := &cloudwatchevents.PutEventsInput{
Entries: []types.PutEventsRequestEntry{
{
Detail: &myDetails,
DetailType: &event.DetailType,
Resources: []string{
*lambdaARN,
},
Source: &event.Source,
},
},
}
基本上我收到一条错误消息,指出分配给“详细信息”字段的字符串格式不正确。我相信这是因为示例代码生成了一个尾随无效的字符串。但是,当您省略 时,您会得到一个 nil 内存引用。
SDK 版本 1 的示例也会生成错误。
任何帮助都会很棒
您 link 编辑的页面上的代码并非 100% 正确。他们实际上 link 页面底部的“完整示例”,代码略有不同:
myDetails := "{ "
for i, d := range event.Details {
if i == (len(event.Details) - 1) {
myDetails = myDetails + "\"" + d.Key + "\": \"" + d.Value + "\""
} else {
myDetails = myDetails + "\"" + d.Key + "\": \"" + d.Value + "\","
}
}
myDetails = myDetails + " }"
但是像这样构建 JSON 并不理想 error-prone,正如您已经发现的那样。
我建议如下:
details := make(map[string]string, len(event.Details))
for _, d := range event.Details {
details[d.Key] = d.Value
}
b, err := json.Marshal(details)
if err != nil {
return
}
fmt.Println(string(b))
查看 playground 以查看它的运行情况:
我已经尝试了两个 AWS Go SDK 的两个版本,每次我都收到一条错误消息,指出 Details 字段格式错误。详细信息字段接受 JSON 字符串。
在 SDK V2 中,您基本上有一个事件结构
type Event struct {
Details []struct {
Key string `json:"Key"`
Value string `json:"Value"`
} `json:"Details"`
DetailType string `json:"DetailType"`
Source string `json:"Source"`
}
示例然后使用此代码构建 JSON 字符串
myDetails := "{ "
for _, d := range event.Details {
myDetails = myDetails + "\"" + d.Key + "\": \"" + d.Value + "\","
}
myDetails = myDetails + " }"
然后进行 api 调用
input := &cloudwatchevents.PutEventsInput{
Entries: []types.PutEventsRequestEntry{
{
Detail: &myDetails,
DetailType: &event.DetailType,
Resources: []string{
*lambdaARN,
},
Source: &event.Source,
},
},
}
基本上我收到一条错误消息,指出分配给“详细信息”字段的字符串格式不正确。我相信这是因为示例代码生成了一个尾随无效的字符串。但是,当您省略 时,您会得到一个 nil 内存引用。
SDK 版本 1 的示例也会生成错误。
任何帮助都会很棒
您 link 编辑的页面上的代码并非 100% 正确。他们实际上 link 页面底部的“完整示例”,代码略有不同:
myDetails := "{ "
for i, d := range event.Details {
if i == (len(event.Details) - 1) {
myDetails = myDetails + "\"" + d.Key + "\": \"" + d.Value + "\""
} else {
myDetails = myDetails + "\"" + d.Key + "\": \"" + d.Value + "\","
}
}
myDetails = myDetails + " }"
但是像这样构建 JSON 并不理想 error-prone,正如您已经发现的那样。
我建议如下:
details := make(map[string]string, len(event.Details))
for _, d := range event.Details {
details[d.Key] = d.Value
}
b, err := json.Marshal(details)
if err != nil {
return
}
fmt.Println(string(b))
查看 playground 以查看它的运行情况: